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


当我使用test-123之类的东西时,它仍然会触发,好像连字符无效。我尝试了\---

评论

我的问题是我实际上使用的是AZ09方法,而不是AZ09 _ .. gr

#1 楼

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

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


评论


连字符的最后放置不适用于某些Microsoft工具,例如Microsoft SQL Server Management Studio。转义连字符确实有效。

–罗斯压机
15年6月8日在17:04

@SabaAhang,因为如果它在开头或结尾,则不能在其他两个字符之间创建一个字符范围(例如[0-9])

–马修
16年7月7日在14:54

@SabaAhang以下文档页面提到连字符可以在字符括号的开头或结尾进行转义:regular-expressions.info/charclass.html

– AbstractVoid
17年1月23日在13:11

#2 楼

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

我已验证表达式/^[a-zA-Z0-9.\-_]+$/确实允许连字符。您还可以使用\w类将其缩短为/^[\w.\-]+$/。您可能仍想养成始终逃避的习惯。)

评论


非常好。 :D虽然我更喜欢可读性(但是我想\ w对于某些专家来说会很容易)

–ParoX
2010-09-13 0:18

连字符的最后放置不适用于某些Microsoft工具,例如Microsoft SQL Server Management Studio。转义连字符确实有效。

–罗斯压机
15年6月8日在17:04

#3 楼

\-可能不起作用,因为您使用字符串从服务器传递了全部内容。如果是这种情况,首先应该转义\,以便服务器端程序也可以处理它。


在服务器端字符串中:\\-
在客户端上边:\-
在正则表达式中(覆盖):-

或者您可以简单地将[]括号中的和放在

评论


我需要在服务器端使用C#。有效。谢谢。

– Topman
6月4日1:22

@Topman更好(对于C#),对服务器端正则表达式,文件名等使用逐字字符串文字,以避免混淆(@“ \”代替“ \\”)。

– MarredCheese
12月2日,22:24

#4 楼

\-应该可以在字符范围内转义-。您可以引用似乎没有的测试内容吗?因为它似乎有效:http://jsbin.com/odita3

#5 楼

通常,在正则表达式中使用连字符(-)字符,重要的是要注意转义(\-)和不转义(-)之间的区别,因为连字符除了本身是字符之外,还被解析为在regex中指定范围。

In the first case,带有转义连字符(\-),正则表达式将仅与连字符匹配,如示例/^[+\-.]+$/

In the second case,在此不转义例如/^[+-.]+$/,因为连字符位于加号和点之间,因此它将匹配所有ASCII值在43(加号)和46(对于点)之间的字符,因此将包括逗号(ASCII值为44)作为副作用。

#6 楼

匹配连字符的更通用的方法是使用字符类来连字符和破折号(“ \ p {Pd}”不带引号)。如果您要处理来自不同文化和来源的文本,则可能会发现存在更多类型的连字符,而不仅仅是一个字符。您可以将其添加到[]表达式内