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
相关产品推荐
相关产品推荐

