我希望在下面使用正则表达式验证用户输入。允许用户输入由逗号或空格分隔的正整数值。问题是在否定测试期间,我输入一个特殊字符,例如?或period(。),IsMatch挂起。任何帮助表示赞赏。
new Regex("^\\s*[0-9]+\\s*(,*\\s*[0-9]+\\s*)*$")
答案 0 :(得分:0)
正则表达式中的(,*\\s*[0-9]+\\s*)*
模式包含多个可选模式,而只有[0-9]+
是必需的,因此它是经典的(a+)+
类似模式,导致catastrophic backtracking具有不匹配的字符串。
您应该确保量化组内至少还有1种强制性模式,例如
@"^\s*[0-9]+(?:(?:\s*,\s*|\s+)[0-9]+)*\s*$"
详细信息
^
-字符串的开头\s*
-可选的0+前导空格[0-9]+
-1个以上数字(?:(?:\s*,\s*|\s+)[0-9]+)*
-0次以上重复:
(?:\s*,\s*|\s+)
-,
包含0+个空格或仅1+个空格[0-9]+
-1个以上数字\s*
-可选的0+尾随空格$
-字符串的结尾。