我正在学习一些正则表达式,因为我正在尝试创建一个验证正确网站的字段,而不是允许空格。
我目前有:
^((http|https|ftp)\://)?(www\.[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*[^\.\,\)\(\s])$
“www.google.com”PASS
“www.goo gle.com”失败
“www.google.com”失败
然而
“”通过
我想通过添加'仅以http | https | ftp开头'这将确保空白不会发生,甚至以[^\s]
为前缀 - 但无济于事。
如果它有助于我使用ASP.NET WebForms RegularExpressionValidator控件。
答案 0 :(得分:0)
编辑:我发现MS RegularExpressionValidator控件将纯空格视为空字符串,并且在插入非空白字符之前验证不会启动。有点烦人,但据说只是添加一个RequiredFieldValidator将完成这项工作(对于任何感兴趣的人)RegularExpressionValidator不会在空白区域上启动
EDIT2:对于我的情况下的其他人,RequiredFieldValidator没用,因为我不希望该字段是强制性的,我只是希望它不包含空格!不知道为什么微软不会在RegEx上验证空白,而是我不得不选择简单的.Trim方法服务器端。
答案 1 :(得分:0)
对于以域名命名的网站,您的正则表达式也会失败,例如http://stackoverflow.com
另外,我觉得有点过于复杂。由于有效的主机/域名只能包含数字,字母和连字符(后者仅在数字或字母包围的情况下......),您可以将正则表达式更改为:
^(?:[a-zA-Z0-9]+[-]*[a-zA-Z0-9]+)(?:[.][a-zA-Z0-9]+[-]*[a-zA-Z0-9]+)+$
我不会检查协议,但如果你需要它,那么这是完整的正则表达式:
^(?:(?:http|https|ftp)\://)?(?:[a-zA-Z0-9]+[-]*[a-zA-Z0-9]+)(?:[.][a-zA-Z0-9]+[-]*[a-zA-Z0-9]+)+$
http://regex101.com/r/pP0iG6/1
相反,因为路径几乎可以包含所有内容(*),在我看来,验证它的唯一方法是发出HEAD并查看服务器的响应代码。