ASP.NET正则表达式限制连续字符

时间:2010-10-19 18:14:10

标签: asp.net regex validation

对RegularExpressionValidator控件使用ASP.NET语法,如何指定两个连续字符的限制,比如字符'x'?

4 个答案:

答案 0 :(得分:0)

您可以提供如下所示的正则表达式:

(\\w)\\1+

(\\w)将匹配任何字词,\\1+将匹配与(\\w)匹配的任何字符。

目前我无法访问asp.net,但请以此控制台应用为例:

Console.WriteLine(regex.IsMatch("hello") ? "Not valid" : "Valid"); // Hello contains to consecutive l:s, hence not valid

Console.WriteLine(regex.IsMatch("Bar") ? "Not valid" : "Valid"); // Bar does not contain any consecutive characters, so it's valid

答案 1 :(得分:0)

Alexn是对的,这是您使用正则表达式匹配连续字符的方式,即(a)\1匹配aa

然而,我认为当你拿着锤子时,这就像是钉子一样。我不会使用正则表达式来验证此输入。相反,我建议在代码中验证这一点(只需循环遍历字符串,比较str[i]str[i-1],检查此情况。)

答案 2 :(得分:0)

这应该有效:

^((?<char>\w)(?!\k<char>))*$

匹配abc,但不匹配abbc

关键是使用所谓的“零宽度负向前瞻断言”(语法:(?!subexpression))。

我们确保与(?<char>\w)匹配的群组不会自行跟踪(以(?!\k<char>)表示)。

请注意,\w可以替换为任何有效的字符集(\w与空格字符不匹配)。

您也可以在没有命名组的情况下执行此操作(请注意,引用的组的编号为2):

^((\w)(?!\2))*$

^开始并以$结尾以匹配整个文本非常重要。

如果您只想排除连续x个字符的文字,可以使用此

^((?<char>x)(?!\k<char>)|[^x\W])*$

或没有反向引用

^(x(?!x)|[^x\W])*$

解释 .NET Framework正则表达式的所有语法元素here

答案 3 :(得分:0)

您可以使用正则表达式来验证错误以及当然正确的内容。正则表达式(.)\1将匹配任意两个连续的字符,因此您可以拒绝任何给出IsValid结果的输入。如果这是您需要的唯一验证,我认为这样做比尝试使用正则表达式来验证正确的输入要容易得多。