Regexpression是asp.net验证器的几个字

时间:2011-10-18 16:36:36

标签: asp.net regex validation

我正在尝试为字符串创建一个验证器,它可能包含1-N个单词,用1个空格分隔(单词之间只有空格)。我是一个正则表达式的新手,所以我感到有点困惑,因为我的表达似乎是正确的:

^[[a-zA-Z]+\s{1}]{0,}[a-zA-Z]+$

我在这里做错了什么? (它只接受2个单词..但我希望它接受1个以上的单词) 非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:2)

正如有人开始使用新的编程语言或语法一样,你很接近,但并不完全!正确使用了^$个锚点,而字符类[a-zA-Z]只会匹配字母(对我来说是正确的),但是你的重复有点过了,你的分组是不是你认为的 - 这是你的主要问题。

^[[a-zA-Z]+\s{1}]{0,}[a-zA-Z]+$
 ^           ^^^^^^^^ 
 a           bbbacccc

它只匹配两个单词,因为你实际上没有任何组重复;这是因为你没有任何组 - 只有字符类。最简单的解决方法是将第一个[及其匹配的结束括号(在上面的清单中标记为a)更改为括号:

^([a-zA-Z]+\s{1}){0,}[a-zA-Z]+$

此单一更改将使其按预期方式工作!但是,我想提出一些建议和考虑因素。

首先,为了便于阅读和维护代码,请尽可能使用单字符重复运算符而不是重复括号。 *重复零次或多次,+重复一次或多次,?重复0次或一次(AKA 可选)。你的重复花括号在语法上是正确的,并做你想要的,但是一个(上面用b标记)应该被删除,因为它是多余的,另一个(用c标记' s)应缩短为星号*,因为它们具有完全相同的含义:

^([a-zA-Z]+\s)*[a-zA-z]+$

其次,我建议考虑(取决于您的应用程序要求)\w速记字符类而不是[a-zA-Z]字符类,并考虑以下因素:

  • 它匹配大写和小写字母
  • 它匹配多于字母(它匹配数字0-9和下划线)
  • 它通常可以配置为匹配非英语(unicode)字母以进行多语言输入

如果其中任何一项不必要或不受欢迎,那么你就走在正确的轨道上了!

在旁注中,字符组合\b是一个单词边界断言,不需要你的情况,因为你已经开始和结束只有字母和字母的地方!

至于更多关于正则表达式的学习,我建议Regular-Expressions.info,它有关于正则表达式的丰富信息以及各种实现的内部工作和怪癖。我还使用一个名为RegexBuddy的工具来测试和调试表达式。