You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter如何用form_field_validator仅验证HTTPS、拒绝HTTP?

解决HTTPS URL验证问题(仅接受HTTPS,拒绝HTTP)

你当前的正则r'https'只是检查字符串中包含"https"字符,这会导致大量误判——比如http://example.com?foo=https这种带HTTP协议的URL也会被判定为有效,完全达不到只接受HTTPS的要求。

要实现仅接受HTTPS协议的URL验证,需要用正则强制匹配以https://开头的字符串,彻底排除HTTP开头的情况。下面是修改后的代码:

修改后的url_validator.dart

import 'package:form_field_validator/form_field_validator.dart';

class UrlValidator extends TextFieldValidator {
  UrlValidator({required String errorText}) : super(errorText);

  // 强制匹配以https://开头的URL
  final urlPattern = r'^https:\/\/.*$';

  @override
  bool isValid(String? value) {
    // 处理空值情况(可根据表单是否允许空值调整逻辑)
    if (value == null || value.isEmpty) return false;
    return RegExp(urlPattern).hasMatch(value);
  }
}

正则规则说明:

  • ^:匹配字符串开头,确保URL从https://开始
  • https:\/\/:匹配HTTPS协议部分(斜杠加转义符是正则语法要求)
  • .*:匹配后续任意长度的合法字符(非换行),覆盖域名、路径、查询参数等部分
  • $:匹配字符串结尾,确保整个URL都符合规则

如果需要更严谨的域名格式验证(避免https://后面直接跟乱码),可以替换为以下正则:

final urlPattern = r'^https:\/\/[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+(/.*)?$';

这个规则会要求https://后面至少包含一个合法域名(如example.com、sub.example.co.uk),路径部分为可选。

验证效果

  • 有效URL:https://example.com、https://www.example.com/path?query=1
  • 无效URL:http://example.com、example.com、http://example.com/https

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 11:52:08