正则表达式的问题!

时间:2009-11-25 12:36:37

标签: javascript regex

我已将以下模式用于电话号码的正则表达式

pattern="[0-9 -+]+$";

电话号码可能包含数字,连字符( - ),空格和加号(+)。它只在我使用数字时有效。使用数字和字母时,它不起作用。

可能是什么问题,请告诉我。

提前致谢

4 个答案:

答案 0 :(得分:7)

它正在解释 - 作为范围的一部分。试试这个:

pattern="^[0-9 +-]+$";

- 或者需要逃避(\-)或者像这样移动到最后(感谢蒂姆)。

答案 1 :(得分:4)

即使在David提出修正后,你的正则表达式也会失败。因为它匹配一个或多个数字和+, - 的任意组合。例如,它匹配99++++--12

这是一个更好的版本,它将格式为999-999-9999的数字与可选的领先国家代码匹配,格式为+9999(长度为2到4位)

(\+\d{2,4}\s*)?(\d{3})-(\d{3})-(\d{4})

答案 2 :(得分:1)

它需要以^开头,而 - 需要使用\

进行转义
pattern=/^[0-9 \-+]+$/;

它需要以^开头,因为它是字符串开头的锚点,如果你不这样做,它会验证以任何东西开头的字符串,只要它们以数字,空格结束, - 或者+

-需要进行转义,因为它是一个特殊字符,并且具有-以外的含义。虽然+是一个特殊字符,但如果您想将其视为类外的+,则需要对其进行转义,而在类中只需要转义]^-\。< / p>

所以在课堂外逃跑

.^$|*+?()[{\

内心逃脱:

]^-\

但是,大多数实现允许您在没有错误的情况下转义类中的所有12个特殊字符,并且只有在转义非特殊字符时它们才会出错,这意味着这一点(注意额外的\之前加上)也会正常工作。

pattern="^[0-9 \-\+]+$"



我总是发现使用a regex tester会让事情变得更容易,因为它可以让我看到错误。

答案 3 :(得分:1)

由于 - (破折号)用作regexp中括号内的范围符号,您需要将其转义,或将其放在最后:

pattern="[0-9 \-+]+$";
// or
pattern="[0-9 +-]+$";

您可能还希望使用 ^ 开始regexp,以确保整个字符串与之匹配,而不仅仅是结束:

pattern="^[0-9 +-]+$";