检查一个字符串是否为 JavaScript 中的字母数字。

8
我想在JavaScript中检查一个字符串是否为严格的字母数字组合。我尝试过以下方法:
var Exp = /^[0-9a-z]+$/;
if(!pwd.match(Exp))
    alert("ERROR")

但是这个问题是,如果输入字符串包含全部字母或全部数字,它会通过。我希望该函数在包含字符数字时才能通过。


如果我们要挑剔的话,“alphanumeric”意味着字母和/或数字,而不仅仅是字母和数字。 - freefaller
1
你的意思是字符串必须至少包含一个字符和一个数字吗? - Stian
嘿,但我需要那个功能用于密码验证,我需要同时包含字母和数字,请问你有什么建议吗? - user1504606
是的,Stain,我希望字符串至少包含一个字母和一个字符。 - user1504606
我认为值得一提的是,有更多的字符可以被视为字母,因此它们可以成为包含在字母数字字符串中的一部分,而不仅仅是 a-zA-Z: 请查看 Unicode 属性转义,以便使用类似于 /\p{Letter}/u 的正则表达式。 - karfau
10个回答

8

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

你应该考虑允许密码中包含非字母数字字符,这样会使它们更安全。

8

尝试使用这个正则表达式:

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

只允许字母和数字。

不允许以下内容:

  • 仅字母
  • 仅数字

请参考实时演示

更新:

以下正则表达式允许:

/^([0-9]|[a-z])+([0-9a-z]+)$/i
  • 字母数字混合
  • 只包含字母
  • 只包含数字

4
您可以使用前瞻
/^(?=.*?[a-z])(?=.*?\d)[a-z\d]+$/i
   ^^^^^^^^^^  ^^^^^^^
    at least   at least
   one letter  one digit

FYI,限制密码允许的字符会大大降低密码的熵(现在只有36个不同的字符),因此使其更容易被破解。不要进行此限制。但是,检查字符串是否包含某种类型的字符是可以的(好吧,也有一些理论认为这也会降低熵,但我对此了解不够)。参见:接受至少一个字母、一个数字和一个特殊字符的正则表达式

4
正确的函数是:
function isAlphaNumeric(str) {
  return str.match(/^[a-z0-9]+$/i) !== null;
}

3

我不想成为那个人,但我也不喜欢在这里找到的所有答案,所以这是我的答案。

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

这里发生了什么?
- `\w` 是“单词”类。 - 它是匹配字母数字和下划线 (`_`) 的快捷方式。 - 它旨在用于匹配形式语言中的标识符。 - 你可以写成 `\code>[A-za-z0-9_]`。 - `\W` 是“单词”类的“否定”形式。 - 它是 "\w" 的相反。 - 你也可以写成 `\code>[^A-za-z0-9_]`。
如果您不关心接受下划线并且只是对一些输入进行消毒,那么您可以使用:
!/\W/.exec(data)

或者,更加直接:

/^\w*$/.exec(data)

这里我使用了RegExp.exec(),但你也可以选择使用String.match(),如果你选择使用String.match(),那么代码会写成:

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

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


3
var pwd = 'somevalue';
if(pwd.match("^[a-zA-Z0-9]*$")){
   alert('aplanumeric');
}
else{
   alert('Not alphanumeric');
}

那不起作用是什么意思?你能展示一下你是如何检查是否为字母数字的吗? - Deepu
这不是 OP 想要的。他们想要确保字符串至少包含一个数字和一个字母。 - Felix Kling
@Felix Kling想要检查一个字符串是否为字母数字组合,他在问题中提到了这一点。 - Deepu
1
他在问题中也说道:“我希望这个函数只有同时包含字符和数字时才会通过。”并且在评论中提到:“我希望字符串中至少包含一个字母和一个字符。” - Felix Kling

1

正则表达式:

/^[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;
};

0

字符串 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]*$");

如果您想检查一个字符串是否同时包含字母和数字,请使用Pattern p。如果您想检查一个字符串是否包含字母或数字,您可以使用Pattern p1。如果您使用Pattern p1来检查一个字符串是否同时包含字母和数字,它将返回false。

    /**
     * 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();

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");

       }

}

0

这适用于任意数量的字符(与被接受的答案不同)

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


0
一个非常简单的方法,无需使用正则表达式:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接