数字的正则表达式验证

时间:2013-04-05 10:59:18

标签: javascript regex

这个正则表达式我已经验证了下面的情况:

正确输入:

  1. 12345678,12345678,12345678
  2. * space * 12345678,12345678,12345678,12345678
  3. 12345678,12345678,*空间*
  4. 12345678
  5. *空间* 12345678,
  6. 12345678,
  7. 结果:返回true(正则表达式适用于上述情况。)

    错误输入:

    1. 1234567812345678

    结果:返回true(应为false)

    对于错误的输入,它应该返回false,但它返回true。我应该怎么做才能验证输入错误?

       var validate_commas = /^(\s*\d{8}\s*[,]?\s*)*$/;
    

    谢谢

5 个答案:

答案 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*)*$/;

顺便说一下,这不接受你的例子所做的空字符串。不确定你是否真的想要那个。