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

问题描述:

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

当我使用类似test-123的东西时,它仍然会触发,就像连字符无效。我试过\---在正则表达式字符括号中包含连字符?

+1

里面我的问题是,我是实际使用方法AZ09,而不是AZ09 _ .. GR – ParoX 2010-09-13 00:17:56

使用\-转义应该没问题,但您也可以尝试将其放在字符类的开头或结尾。这应该为你工作:

/^[a-zA-Z0-9._-]+$/ 
+1

将连字符放到最后不适用于某些Microsoft工具,如Microsoft SQL Server Management Studio。逃避他们连字符确实工作。 – 2015-06-08 17:04:17

+1

为什么只是开始或结束?找不到文档 – 2015-10-26 04:54:50

+0

@SabaAhang中的任何内容,因为如果它在开始或结束时不能在两个其他字符之间创建一系列字符(例如'[0-9]') – Matthew 2016-07-07 14:54:20

使用\-转义连字符是正确的方法。

我已验证表达式/^[a-zA-Z0-9.\-_]+$/确实允许使用连字符。您也可以使用\w类将其缩短为/^[\w.\-]+$/

(把连字符最后在表达实际上导致它不需要逃避,因为它当时不能是一个系列的一部分,但是您可能仍想进入的总是逃脱它的习惯。)

+0

很不错的。 :D我更喜欢可读性虽然(我想\ w对于一些专家来说很容易) – ParoX 2010-09-13 00:18:31

+0

将连字符放到最后不适用于某些Microsoft工具,如Microsoft SQL Server Management Studio。逃避他们连字符确实工作。 – 2015-06-08 17:04:21

\-应努力逃脱字符范围的-。你可以引用你测试时似乎没有?因为它似乎工作:http://jsbin.com/odita3

的\ - 也许是行不通的,因为你从一个字符串的服务器通过整个的东西。如果是这样的话,你应该首先逃避\,所以服务器端程序也可以处理它。

  • 在服务器端的字符串:\\ -
  • 在客户端:\ -
  • 在正则表达式(套): -

或者你可以简单地把在和[]括号。

匹配连字符的更通用的方法是通过使用用于连字符和破折号字符类(“\ p {PD}”没有引号)。如果你正在处理来自不同文化和来源的文本,你可能会发现那里有更多类型的连字符,而不仅仅是一个字符。您可以添加的[]表达