$.validator.addMethod('AZ09_', function (value) {
return /^[a-zA-Z0-9.-_]+$/.test(value);
}, 'Only letters, numbers, and _-. are allowed');
当我使用像test-123
这样的东西时,它仍会触发,就像连字符无效一样。我尝试了\-
和--
答案 0 :(得分:78)
使用\-
转义应该没问题,但您也可以尝试将其放在字符类的开头或结尾。这应该适合你:
/^[a-zA-Z0-9._-]+$/
答案 1 :(得分:24)
使用\-
转义连字符是正确的方法。
我已经验证表达式/^[a-zA-Z0-9.\-_]+$/
允许使用连字符。您还可以使用\w
类将其缩短为/^[\w.\-]+$/
。
(在连接表达式中使用连字符实际上导致它不需要转义,因为它不能成为范围的一部分,但是你可能仍然想要养成总是逃避它的习惯。)
答案 2 :(得分:2)
\-
应该可以逃脱角色范围内的-
。你能引用你测试的东西吗?因为它似乎有效:http://jsbin.com/odita3
答案 3 :(得分:0)
\ _也许没有用,因为你用服务器从服务器传递了所有东西。如果是这种情况,您应该首先转义\,以便服务器端程序也可以处理它。
或者您可以简单地放在[]括号中。
答案 4 :(得分:0)
一种更通用的匹配连字符的方法是使用连字符和短划线的字符类(“\ p {Pd}”不带引号)。如果您正在处理来自不同文化和来源的文本,您可能会发现有更多类型的连字符,而不仅仅是一个字符。你可以在[]表达式
中添加它答案 5 :(得分:0)
通常在正则表达式中使用连字符(-
),重要的是要注意转义(\-
)和不转义(-
)之间的区别,因为连字符除了是字符本身被解析以在正则表达式中指定范围。
In the first case
,带有转义连字符(\-
),正则表达式仅与连字符匹配,如示例/^[+\-.]+$/
In the second case
,此处不转义例如/^[+-.]+$/
,因为连字符位于加号和点之间,因此它将匹配所有ASCII值在43(加号)和46(加点)之间的字符。将包含逗号(ASCII值为44)作为副作用。