应该验证1-280个输入字符,但是当输入超过280个字符时它会挂起。
澄清 我使用上面的正则表达式来验证输入字符串的长度最多为280个字符。 我正在使用asp:RegularExpressionValidator来做到这一点。
答案 0 :(得分:4)
本身没有什么“错误”,但是它很可怕,因为大多数RE引擎(你没有说你正在使用哪一个)当它与第一个不匹配时它尝试的东西,因为它导致引擎回溯并尝试不同的可能性(没有一个可以导致匹配)。所以这不是一个悬念,而是一台试图围绕2 280 操作执行以查看是否存在匹配的机器。如果我不等待,请原谅我!
当然,理论上RE编译器可以将RE的(.|\s)
部分合并到它不需要回溯处理的东西中。有些RE引擎会这样做(通常是自动机理论上的更多),但很多都没有(基于堆栈的引擎)。
答案 1 :(得分:0)
正在尝试为每个字符尝试.
和\s
的每种可能组合,以寻找与字符串匹配的模式版本。
.
已匹配任何字符,因此(.|\s)
是多余的。此外,如果您只想查看字符串的长度,那么就这样做 - 为什么要拔出正则表达式?
答案 2 :(得分:0)
如果确实想要使用正则表达式,则可以将.{1, 280}$
与SingleLine
选项结合使用,以便.
元字符符合所有内容,包括新行(请参阅here,正则表达式API部分)。