如何使用正则表达式验证不带http和https前缀的URL
URL校验正则方案(支持无http/https前缀场景)
适用正则规则
可直接使用以下正则覆盖带/不带协议前缀的通用URL校验需求:^((https?|ftp):\/\/)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}(\/[^\s]*)?$
该正则覆盖的合法场景包括:
- 带http/https/ftp前缀的完整URL,如
https://google.com、http://www.example.com/path?query=1 - 不带协议前缀的根域名/子域名,如
google.com、www.example.com - 带路径、参数后缀的无协议URL,如
google.com/search?q=test - 自动过滤带空格、特殊符号的非法内容
如果需要仅支持http/https协议,删掉正则中的|ftp即可。如果需要额外适配localhost、IP地址类的校验,可在域名匹配段补充对应的IP规则。
Dart 代码使用示例
bool isValidUrl(String input) { final urlRegExp = RegExp(r'^((https?|ftp):\/\/)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}(\/[^\s]*)?$'); return urlRegExp.hasMatch(input.trim()); }
调用该方法校验google.com时会返回true,和你原有的校验逻辑相比可兼容无协议前缀的场景。
内容的提问来源于stack exchange,提问作者Lalit Rawat
相关产品推荐
相关产品推荐

