在正则表达式字符括号中包含连字符?

时间:2010-09-13 00:04:26

标签: javascript jquery regex testing validation

$.validator.addMethod('AZ09_', function (value) { 
    return /^[a-zA-Z0-9.-_]+$/.test(value); 
}, 'Only letters, numbers, and _-. are allowed');

当我使用像test-123这样的东西时,它仍会触发,就像连字符无效一样。我尝试了\---

6 个答案:

答案 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)作为副作用。