正则表达式;查找一行是否包含任何超过X个字符的单词

时间:2010-06-03 05:13:53

标签: vb.net regex validation

我正在尝试在ASP.NET网站上使用Validator,并且需要查找“街道地址”文本框是否包含有效条目。

包含长于X个字符的单词(在这种情况下为25,没有标点符号或空格)的条目将导致打印的A4页面上的HTML无法正确包装,因此无法正确地将某些尺寸限制为正确地推动边距

对于街道地址,我希望匹配“201 Long Road”有效但“235 ReallyLongAndNarrowWindingDoadBesideTheRiver Street”无效。

使用Microsoft .Net Regular Expression Validator我需要知道RegEx模式可能是什么。

我认为如果找到匹配,Validator将正确触发,但是如果没有匹配,Validator将不会触发,并且Update按钮(在这种情况下)将不会触发。

由于街道地址可以包含大写字母和数字等,因此它需要适应它,空格,逗号,半冒号和冒号以及连字符也是有效字符。

任何帮助都会非常感激,因为我真的遇到了这个问题。

谢谢, 大卫

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容。

"^\w{0,25}(?>\W+\w{1,25})*\W*$"

以0-25个字符开头。然后我们有一个至少一个非单词的重复组,然后是1-25个单词。最后,我们最后可以有0个或更多的非单词。 ?>是我未经考验的尝试,以消除exponential backtracking

答案 1 :(得分:1)

使用否定断言:

(?!.*\S{25})

\S{25}匹配25 \S的序列(必须是更长时间的子序列)。 (?!pattern)是一个负向前瞻,如果模式不匹配则为真。 .*允许前瞻尽可能看起来。

因此整个模式是

^(?!.*\S{25}).*$

这匹配所有不包含\S{25}see it in action on rubular.com, with threshold 10)的字符串。

另见