对RegularExpressionValidator控件使用ASP.NET语法,如何指定两个连续字符的限制,比如字符'x'?
答案 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结果的输入。如果这是您需要的唯一验证,我认为这样做比尝试使用正则表达式来验证正确的输入要容易得多。