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

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 中包含特殊字符的重复模式?

js 正则表达式获取小括号内的内容,不含括号

正则表达式

js中如何用正则判断字符串中包含百分号

正则表达式判断字符串中包含数字、大写字符、小写字母、特殊符号中的几种怎么判断?

正则表达式匹配文本中包含换行符等空白字符如何匹配