一般来说,对于正则表达式中的连字符(-),重要的是要注意转义(\-)和不转义(-)连字符之间的区别,因为连字符除了本身是一个字符外,还被解析为指定正则表达式中的范围。 In the first case,带转义连字符(\-),regex将仅匹配示例/^[+\-.]+$/中的连字符 In the second case,这里不转义,例如/^[+-.]+$/,因为连字符在加号和点之间,所以它将匹配ASCII值在43(表示加号)和46(表示点)之间的所有字符,因此将包含逗号(ASCII值为44)作为副作用。
7条答案
按热度按时间ykejflvf1#
使用
\-
转义应该没问题,但您也可以尝试将其放在字符类的开头或结尾。这应该对你有用:sdnqo3pr2#
使用
\-
转义连字符是正确的方法。我已经验证了表达式
/^[a-zA-Z0-9.\-_]+$/
允许连字符。您也可以使用\w
类将其缩短为/^[\w.\-]+$/
。(将连字符放在表达式的最后实际上会导致它不需要转义,因为它不能是范围的一部分,但是您可能仍然希望养成总是转义它的习惯。
wko9yo5t3#
- maybe不起作用,因为你用一个字符串从服务器传递了所有的东西。如果是这样的话,你应该首先转义\,这样服务器端程序也可以处理它。
或者,您可以简单地在[]方括号的和处放置。
slhcrj9b4#
一般来说,对于正则表达式中的连字符(
-
),重要的是要注意转义(\-
)和不转义(-
)连字符之间的区别,因为连字符除了本身是一个字符外,还被解析为指定正则表达式中的范围。In the first case
,带转义连字符(\-
),regex将仅匹配示例/^[+\-.]+$/
中的连字符In the second case
,这里不转义,例如/^[+-.]+$/
,因为连字符在加号和点之间,所以它将匹配ASCII值在43(表示加号)和46(表示点)之间的所有字符,因此将包含逗号(ASCII值为44)作为副作用。vwoqyblh5#
\-
应该可以转义字符范围中的-
。你能引用你测试过的东西吗?因为它似乎起作用了:http://jsbin.com/odita3beq87vna6#
匹配连字符的一种更通用的方法是使用字符类来匹配连字符和破折号(不带引号的“\p{Pd}”)。如果您正在处理来自不同文化和来源的文本,您可能会发现有更多类型的连字符,而不仅仅是一个字符。您可以将其添加到[]表达式中
cetgtptt7#
尽管在大多数情况下都是被接受的答案,但在使用字段验证时,我发现了一些问题,甚至是scaping,不仅是连字符,还有其他字符,如空格(\s)或点(.)。通常情况下,一个scape
\-
就可以完成这项工作,但在验证中似乎需要双重scaping它们,即scape the scaping backslash:\\-
希望这对某人有帮助。