【问题标题】: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

标签: javascript jquery regex testing validation


【解决方案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】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-28
        相关资源
        最近更新 更多