【问题标题】:To check if a string is alphanumeric in javascript在javascript中检查字符串是否为字母数字
【发布时间】:2013-04-30 11:41:39
【问题描述】:

我想检查一个字符串在 javascript 中是否为严格字母。 我试过这个:

var Exp = /^[0-9a-z]+$/;
if(!pwd.match(Exp))
alert("ERROR")

但问题在于,如果它包含所有字母或所有数字,它会传递输入字符串,如果它同时包含字符和数字,我希望函数传递。

【问题讨论】:

标签: javascript regex


【解决方案1】:

试试这个正则表达式:

/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+[0-9a-z]+$/i

只允许字母数字。

不允许:

  • 只有阿尔法
  • 只有数字

参考LIVE DEMO

更新:

下面的正则表达式允许:

/^([0-9]|[a-z])+([0-9a-z]+)$/i
  • 字母数字
  • 只有阿尔法
  • 只有数字

【讨论】:

    【解决方案2】:

    在我看来,Felix Kling 的答案是最好的单一正则表达式解决方案,但我会考虑使用三种模式。这允许您返回有用的错误消息:

    if(pwd.match(/[^0-9a-z]/i))
        alert("Only letters and digits allowed!");
    else if(!pwd.match(/\d/))
        alert("At least one digit required!");
    else if(!pwd.match(/[a-z]/i))
        alert("At least one letter required!");
    else
        // process pwd
    

    您应该考虑在密码中允许使用非字母数字字符 - 这样会更安全。

    【讨论】:

      【解决方案3】:

      你可以使用lookaheads:

      /^(?=.*?[a-z])(?=.*?\d)[a-z\d]+$/i
         ^^^^^^^^^^  ^^^^^^^
          at least   at least
         one letter  one digit
      

      仅供参考,限制密码的允许字符会减少熵很多(现在只有 36 个不同的字符),因此更容易破解。不要做这个限制。检查字符串是否包含某种类型的字符很好(嗯,有一些理论认为这也会降低熵,但我对此没有足够的了解)。

      另见:Regex to accept atleast one alphabet one numeric char and one special Character

      【讨论】:

        【解决方案4】:
        var pwd = 'somevalue';
        if(pwd.match("^[a-zA-Z0-9]*$")){
           alert('aplanumeric');
        }
        else{
           alert('Not alphanumeric');
        }
        

        【讨论】:

        • 那不起作用是什么意思?你能证明你是如何检查非数字的吗
        • 这不是 OP 想要的。他们希望确保字符串至少包含一个数字和一个字母。
        • @Felix Kling 他想检查一个字符串是否是字母数字,他在问题中提到了它
        • 而且他还在问题中说:“如果函数同时包含字符和数字,我希望函数通过。” 并且在 cmets “我想要字符串中至少包含一个字母和一个字符".
        【解决方案5】:

        正确的功能是

        function isAlphaNumeric(str) {
          return str.match(/^[a-z0-9]+$/i) !== null;
        }
        

        【讨论】:

          【解决方案6】:

          String myString1 = "abcdefghijklmnop1";

              /**
               * To Check Alphanumeric myString1==ABCD is Working;myString1==123 is Working;myString1==ABCD123 is not Working
               */
              Pattern p1 = Pattern.compile("^[a-zA-Z0-9]*$");
          

          如果您检查 p1 是否包含字母和数字,则 p1 将显示为 false,因此请使用 Pattern p 如果您想检查它是否包含字母或数字,您可以使用 Pattern p1

              /**
               * To Check both Alpha and Numeric only myString1==ABCD123 is Working
               */
          
              Pattern p = Pattern
                      .compile("[a-zA-Z]+[0-9]+[a-zA-Z0-9]*|[0-9]+[a-zA-Z][a-zA-Z0-9]*");
          
              boolean hasSpecialChar = p.matcher(myString1).find();
          
              if (hasSpecialChar) {
          
                  System.out.println("Working");
          
              } else {
          
                  System.out.println("not Working");
          
              }
          
                               /***************OR*******************/
          

          char[] charArray = myString1.toCharArray();

              for (char ch : charArray) {
          
                  if (Character.isUpperCase(ch)) {
          
                  }
                  if (Character.isLetter(ch)) {
          
                      containsletter = true;
                  }
          
                  if (Character.isDigit(ch)) {
          
                      containsdigits = true;
          
                  }
               }
                 if(containsletter&&containsdigits){
          
                      System.out.println("Working");
          
                 }
                 else{
          
                      System.out.println("not Working");
          
                 }
          
          }
          

          【讨论】:

            【解决方案7】:

            无需正则表达式的非常简单的方法:

            function stringIsStrictlyAlphaNumeric(string)
            {
                //returns true for letters, digits or both
                var stringIsLooselyAlphanumeric = string => [...string].every(character => '0123456789abcdefghijklmnopqrstuvwxyzABCEDEFGHIJKLMNOPQRSTUVWXYZ'.includes(character));
                //returns true for digits only 
                var stringIsComposedOfDigitsOnly = string => [...string].every(character => '0123456789'.includes(character));  
                //returns true for letters only 
                var stringIsComposedOfLettersOnly = string => [...string].every(character => 'abcdefghijklmnopqrstuvwxyzABCEDEFGHIJKLMNOPQRSTUVWXYZ'.includes(character)); 
                //returns true for letters and digits only.
                return stringIsLooselyAlphanumeric(string) && !stringIsComposedOfDigitsOnly(string) && !stringIsComposedOfLettersOnly(string);  
            }
            

            请这样使用:

            stringIsStrictlyAlphaNumeric('hello123'); //returns true
            stringIsStrictlyAlphaNumeric('hello');    //returns false
            stringIsStrictlyAlphaNumeric('123');      //returns false
            stringIsStrictlyAlphaNumeric('');         //returns false
            

            【讨论】:

              【解决方案8】:

              这适用于任意数量的字符(与接受的答案相反)

              /^[a-z0-9]*$/i

              【讨论】:

                【解决方案9】:

                正则表达式:

                /^[a-z0-9]+$/i

                比正则表达式更快:

                function isAlphaNumeric(str) {
                  var code, i, len;
                
                  for (i = 0, len = str.length; i < len; i++) {
                    code = str.charCodeAt(i);
                    if (!(code > 47 && code < 58) && // numeric (0-9)
                        !(code > 64 && code < 91) && // upper alpha (A-Z)
                        !(code > 96 && code < 123)) { // lower alpha (a-z)
                      return false;
                    }
                  }
                  return true;
                };
                

                来源:https://www.py4u.net/discuss/280185

                【讨论】:

                  【解决方案10】:

                  我讨厌成为那个人,但我也讨厌在这里找到的所有答案,所以这是我的。

                  function isalnum(data) {
                    return !/\W|_/.exec(data)
                  }
                  

                  这是怎么回事?

                  • \w 是“单词”类。

                    • 这是匹配字母数字和下划线 (_) 的快捷方式
                    • 它用于匹配正式语言中的标识符
                    • 你可以写[A-za-z0-9_]
                  • \W是“word”类的“否定”形式。

                    • 与“\w”相同,但为负数。
                    • 你也可以写[^A-za-z0-9_]
                  • 集合论 101

                  如果您不介意接受下划线而只是清理一些输入,则可以使用

                  !/\W/.exec(data)
                  

                  你也可以把表达式写成

                  !data.match(/\W|_/)
                  

                  为什么,是的,我确实喜欢正则表达式。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2017-10-18
                    • 2013-08-10
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-06-21
                    • 2011-12-24
                    相关资源
                    最近更新 更多