【问题标题】:Regular expression for alphanumeric字母数字的正则表达式
【发布时间】:2011-09-16 02:22:14
【问题描述】:

我想要一个 java 中的正则表达式,它必须在任何位置至少包含一个字母和一个数字。它用于包含数字和数字的密码。

这应该适用于:

“1a1b23nh”已接受

“bc112w”已接受

“abc”不接受

“123”不接受

不允许使用特殊字符。

【问题讨论】:

    标签: java regex


    【解决方案1】:
    ([0-9]+[a-zA-Z][0-9a-zA-Z]*)|([a-zA-Z]+[0-9][0-9a-zA-Z]*)
    

    【讨论】:

      【解决方案2】:
      (([a-z]+[0-9]+)+|(([0-9]+[a-z]+)+))[0-9a-z]*
      

      简单的内容检查怎么样?检查是否有数字和字符

      String input = "b45z4d";
      boolean alpha = false;
      boolean numeric = false;
      boolean accepted = true;
      for (int i = 0; i < input.length(); ++i)
      {
          char c = input.charAt(i);
          if (Character.isDigit(c))
          {
              numeric = true;
          } else if (Character.isLetter(c))
          {
              alpha = true;
          } else
          {
              accepted = false;
              break;
          }
      }
      
      if (accepted && alpha && numeric)
      {
          // Then it is correct
      }
      

      【讨论】:

      • 应该有办法在 Java 中设置 Ignorecase 标志不是吗?
      • @fiver:是的,你确实是对的。这是否更好。还是我还缺少什么?
      • 哈哈,所以你感谢我,但接受我更正的答案,而不是我的 :)
      • 你也需要 ^ 和 $ ,'% 1bc112w' 验证为真
      • @fiver:哈哈,是的,我会给你+1作为补偿。 :D
      【解决方案3】:

      我知道这个问题已经被回答并接受了,但我会这样做:

      Pattern pattern = Pattern.compile("(?i)(?:((?:\\d+[a-z]+)|(?:[a-z]+\\d+))\\w*)");
      
      Object[][] tests = new Object[][] {
              { "1a1b23nh", Boolean.valueOf(true) },
              { "bc112w", Boolean.valueOf(true) },
              { "abc", Boolean.valueOf(false) },
              { "123", Boolean.valueOf(false) }
      };
      
      for (Object[] test : tests) {
          boolean result = pattern.matcher((String)test[0]).matches();
          boolean expected = ((Boolean)test[1]).booleanValue();
          System.out.print(test[0] + (result ? "\t " : "\t not ") + "accepted"); 
          System.out.println(result != expected ? "\t test failed" : "");
      }
      System.out.println("\nAll checks have been executed");
      

      (?i) 使正则表达式不区分大小写。

      【讨论】:

        【解决方案4】:

        这是 Python,同样的模式应该在 Java 中工作:

        >>> import re
        >>> re.compile('[0-9a-z]*[0-9][0-9a-z]*[a-z][0-9a-z]*|[0-9a-z]*[a-z][0-9a-z]*[0-9][0-9a-z]*', re.I)
        <_sre.SRE_Pattern object at 0x830fbd0>
        >>> p=_
        >>> for s in '1a1b23nh', 'bc112w', 'abc', '123':
        ...  print s, p.match(s)
        ... 
        1a1b23nh <_sre.SRE_Match object at 0xb73a3d78>
        bc112w <_sre.SRE_Match object at 0xb73a3d78>
        abc None
        123 None
        

        第二个想法,最好在末尾加上'$',否则它会匹配'ab12/'

        【讨论】:

          【解决方案5】:

          抱歉,javascript 示例 我会分解它以避免难以阅读的正则表达式。

          function valid(s) {
            return /^[a-z0-9]+$/i.test(s) &&
                   /[a-z]+/i.test(s) &&
                   /[0-9]+/.test(s)
          }
          
          valid('123a87') ; //# =>  true
          valid('A982') ; //# =>  true
          valid('$54 ') ; //# =>  false
          valid('123') ; //# =>  false
          valid('abd') ; //# =>  false
          

          【讨论】:

            猜你喜欢
            • 2014-05-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多