我已将以下模式用于电话号码的正则表达式
pattern="[0-9 -+]+$";
电话号码可能包含数字,连字符( - ),空格和加号(+)。它只在我使用数字时有效。使用数字和字母时,它不起作用。
可能是什么问题,请告诉我。
提前致谢
答案 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 +-]+$";