正则表达式 - 使用ASP.NET RegularExpressionValidator保持仅匹配空格

时间:2014-10-01 15:06:25

标签: asp.net regex

我正在学习一些正则表达式,因为我正在尝试创建一个验证正确网站的字段,而不是允许空格。

我目前有:

^((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控件。

2 个答案:

答案 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并查看服务器的响应代码。