这个正则表达式我已经验证了下面的情况:
正确输入:
结果:返回true(正则表达式适用于上述情况。)
错误输入:
结果:返回true(应为false)
对于错误的输入,它应该返回false,但它返回true。我应该怎么做才能验证输入错误?
var validate_commas = /^(\s*\d{8}\s*[,]?\s*)*$/;
谢谢
答案 0 :(得分:2)
请参阅描述中的歧义,详细了解您的问题为何不明确,以及这会对您获得的答案产生何种影响。
我假设空格(ASCII 32)是任意允许的:
我假设您要禁止水平制表符,新行,回车符和other whitespace characters matched by \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>* ]
使用上面的语法,可以很容易地编写正则表达式解决方案:
var regex = /^ *\d{8} *(?:, *\d{8} *)*(?:, *)?$/;
您应该为输入指定语法,而不是显示您想要匹配的字符串的示例。示例可能无法涵盖所有案例,并且回答者通常假定“不关心”或对示例中未说明的案例做出一些假设。
答案 1 :(得分:0)
删除可选的逗号会有帮助吗?
var validate_commas = /^(\s*\d{8}\s*)(,\s*\d{8}\s*)*,?$/;
如果没有更清晰的信息,这是最好的,可以在不做出更多假设的情况下完成...... 例如会不会只有一个数字而且没有逗号?
答案 2 :(得分:0)
这应该有效
var validate_commas = /^(\s*\d{8}\s*(?:$|,\s*))*$/;
将需要一个或多个8个数字字符的实例,后跟字符串的结尾或另一个逗号。
或者,如果您不希望表达式与空行匹配,请将最后一个量词更改为一个或多个字符:+
var validate_commas = /^(\s*\d{8}\s*(?:$|,\s*))+$/;
将在以下输入中返回 true :
12345678,12345678,12345678
*space*12345678 , 12345678 , 12345678 , 12345678
12345678,12345678,*space*
12345678
*space*12345678,
12345678,
将在以下输入上返回 false :
1234567812345678
sdsdsfsd
12345678, 12345678 12345678
我希望这会有所帮助。
答案 3 :(得分:0)
您可以尝试这样的事情:
var validate_commas = /^\s*\d{8}(\s*,\s*(?:\d{8})?)*$/;
与其他建议非常相似,只是它使附加数字可选,从而允许12345678,
等。
答案 4 :(得分:-1)
你的意思是逗号在数字之间不是可选的吗?
试试这个:
var validate_commas = /^(\s*\d{8}\s*)(,\s*\d{8}\s*)*$/;
顺便说一下,这不接受你的例子所做的空字符串。不确定你是否真的想要那个。