【问题标题】:RegEx for including alphanumeric and special charactersRegEx 用于包含字母数字和特殊字符
【发布时间】:2013-01-16 04:57:00
【问题描述】:

我要求在字段中允许使用字母数字和某些其他字符。我正在使用这个正则表达式:

 "^[a-zA-Z0-9!@#$&()-`.+,/\"]*$".

允许的特殊字符是! @ # $ & ( ) - ‘ . / + , “

但是当我用字符串 "test_for_extended_alphanumeric" 测试模式时,字符串通过了测试。我没有"_" 允许在模式中。我做错了什么?

【问题讨论】:

    标签: regex


    【解决方案1】:

    使用此正则表达式,您允许所有字母数字和特殊字符。这里\w 允许所有数字,\s 允许空格

    [><?@+'`~^%&\*\[\]\{\}.!#|\\\"$';,:;=/\(\),\-\w\s+]*
    

    允许的特殊字符是! @ # $ &amp; ( ) - ‘ . / + , “ = { } [ ] ? / \ |

    【讨论】:

      【解决方案2】:

      因为不知道有多少特殊字符,所以很难通过白名单来检查字符串是否包含特殊字符。检查字符串是否仅包含字母或数字可能更有效。

      对于 kotlin 示例

      fun String.hasOnlyAlphabetOrNumber(): Boolean {
          val p = Pattern.compile("[^a-zA-Z0-9]")
          return !(p.matcher(this).matches())
      }
      

      对于 swift4

      func hasOnlyAlphabetOrNumber() -> Bool {
          if self.isEmpty { return false }
          do {
              let pattern = "[^a-zA-Z0-9]"
              let regex = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)
              return regex.matches(in: self, options: [], range: NSRange(location: 0, length: self.count)).count == 0
          } catch {
              return false
          }
      }
      

      【讨论】:

        【解决方案3】:

        这个怎么样..它允许特殊字符以及字母数字

        "[-~]*$"
        

        【讨论】:

          【解决方案4】:

          在您的字符类中,)-' 被解释为一个范围,与例如a-z,因此它指的是具有从 41 ) 到 96 ' 的十进制 ASCII 代码的任何字符。

          由于_ 的代码为 95,因此它在范围内,因此是允许的,&lt;=&gt; 等也是如此。

          为避免这种情况,您可以转义-,即\-,或者将- 放在字符类的开头或结尾:

          /^[a-zA-Z0-9!@#$&()`.+,/"-]*$/
          

          " 不需要转义,注意因为你使用的是* 量词,所以空字符串也可以通过测试。

          【讨论】:

            【解决方案5】:

            字符类中的连字符表示一个范围,除非它们被转义或位于字符类的开头或结尾。如果您想包含连字符,通常最好将它们放在前面,这样您甚至不必担心转义:

            ^[-a-zA-Z0-9!@#$&()`.+,/\"]*$
            

            顺便说一句,_ 确实介于 ) 和 ASCII 中的反引号之间:

            http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters

            【讨论】:

            • 如果我想允许 (ü é â ä à å ç ê ë è ï ì æ Æ ô ö ò û ù ÿ á í ó ú) 字符使用正则表达式输入。跨度>
            【解决方案6】:

            你需要转义连字符:

            "^[a-zA-Z0-9!@#$&()\\-`.+,/\"]*$"
            

            如果不转义,则表示一系列字符,例如a-z

            【讨论】:

            • 感谢您的快速回复。这有帮助。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-09
            • 1970-01-01
            • 1970-01-01
            • 2011-12-12
            相关资源
            最近更新 更多