在正则表达式字符括号中包含连字符?
Posted
技术标签:
【中文标题】在正则表达式字符括号中包含连字符?【英文标题】:Including a hyphen in a regex character bracket? 【发布时间】:2011-04-11 11:08:58 【问题描述】:$.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。转义连字符确实有效。 @SabaAhang 因为如果它位于开头或结尾,则不能在其他两个字符之间创建一系列字符(例如[0-9]
)
@SabaAhang 以下文档页面提到连字符可以在字符括号的开头或结尾不转义:regular-expressions.info/charclass.html【参考方案2】:
使用\-
转义连字符是正确的方法。
我已验证表达式 /^[a-zA-Z0-9.\-_]+$/
确实允许使用连字符。您还可以使用\w
类将其缩短为/^[\w.\-]+$/
。
(将连字符放在表达式的最后实际上会导致它不需要转义,因为它不能成为范围的一部分,但是您可能仍想养成始终转义它的习惯。)
【讨论】:
非常好。 :D 我更喜欢可读性(我猜 \w 对一些专家来说很容易) 将连字符放在最后不适用于某些 Microsoft 工具,例如 Microsoft SQL Server Management Studio。转义连字符确实有效。【参考方案3】:\- 可能不起作用,因为您使用字符串从服务器传递了整个内容。如果是这种情况,您应该首先将 \ 转义,以便服务器端程序也可以处理它。
在服务器端字符串中:\\- 在客户端:\- 在正则表达式中(封面):-或者你可以简单地把 [] 括号放在和。
【讨论】:
我需要在服务器端使用 C#。有效。谢谢。 @Topman 更好的是(对于 C#),将 verbatim string literals 用于服务器端正则表达式、文件名等以避免混淆(@"\"
而不是 "\\"
)。【参考方案4】:
通常在正则表达式中使用连字符 (-
) 字符,重要的是要注意转义 (\-
) 和不转义 (-
) 连字符之间的区别,因为连字符本身除了是一个字符外,还被解析以指定正则表达式中的范围。
In the first case
,带有转义的连字符 (\-
),正则表达式将仅匹配连字符,如示例 /^[+\-.]+$/
In the second case
,这里不转义例如/^[+-.]+$/
,因为连字符在加号和点之间,因此它将匹配所有ASCII值在43(加号)和46(点)之间的字符,因此将包括逗号( ASCII 值 44) 作为副作用。
【讨论】:
【参考方案5】:\-
应该可以转义字符范围内的-
。你能引用你测试过的东西吗?因为它似乎有效:http://jsbin.com/odita3
【讨论】:
【参考方案6】:一种更通用的匹配连字符的方法是使用连字符和破折号的字符类(“\pPd”不带引号)。如果您正在处理来自不同文化和来源的文本,您可能会发现那里有更多类型的连字符,而不仅仅是一个字符。您可以在 [] 表达式中添加它
【讨论】:
以上是关于在正则表达式字符括号中包含连字符?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用正则表达式匹配 Ruby 中包含特殊字符的重复模式?