这个regex表达式验证了下面的情况:
正确输入:
结果:返回true(regex表达式在上述情况下正常工作)。
输入错误:
结果:返回true (应该是false)
对于错误的输入,它应该返回false,但它返回true。我应该做些什么来验证错误的输入?
var validate_commas = /^(\s*\d{8}\s*[,]?\s*)*$/;谢谢
发布于 2013-04-05 16:02:11
有关您的问题为何含糊不清以及如何影响您得到的答案的更多详细信息,请参见description中的歧义。
我假定空间(ASCII 32)是任意允许的:
我假设您希望不允许水平制表符、新行、回车和\s,并且只允许自由指定空格(ASCII 32)。
具有上述假设的BNF语法是:
<DIGIT> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<NUMBER> ::= <DIGIT> {8}
<SPACE> ::= " "
<TOKEN> ::= <SPACE>* <NUMBER> <SPACE>*
<LIST> ::= <TOKEN> ( "," <TOKEN> )* [ "," <SPACE>* ]有了上面的语法,很容易编写regex解决方案:
var regex = /^ *\d{8} *(?:, *\d{8} *)*(?:, *)?$/;描述中的歧义
与其像建议的那样显示要匹配的字符串示例,不如为输入指定语法。例子可能不包括所有的案例,而且回答者通常假设“不关心”,或者为这些例子中没有说明的案例提供一些假设。
发布于 2013-04-05 11:03:37
删除可选逗号有帮助吗?
var validate_commas = /^(\s*\d{8}\s*)(,\s*\d{8}\s*)*,?$/;如果没有更清晰的信息,这是最好的做法,不需要做更多的假设.会不会只有一个数字而没有逗号?
发布于 2013-04-05 11:57:12
这应该能行
var validate_commas = /^(\s*\d{8}\s*(?:$|,\s*))*$/;它将接受8个数字字符的一个或多个实例,后面跟着字符串或另一个逗号的结尾。
或者,如果不希望表达式匹配空行,请将最后一个量词改为一个或多个字符:+
var validate_commas = /^(\s*\d{8}\s*(?:$|,\s*))+$/;将对以下输入返回真:
12345678,12345678,12345678
*space*12345678 , 12345678 , 12345678 , 12345678
12345678,12345678,*space*
12345678
*space*12345678,
12345678,将对以下输入返回false:
1234567812345678
sdsdsfsd
12345678, 12345678 12345678我希望这能帮到你。
https://stackoverflow.com/questions/15832155
复制相似问题