7

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

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

但是这样做的问题是,如果它包含所有字母或所有数字,它会传递输入字符串,如果它同时包含字符和数字,我希望函数通过。

4

10 回答 10

7

试试这个正则表达式:

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

仅允许字母数字。

它不允许:

  • 只有阿尔法
  • 只有数字

参考现场演示

更新:

下面的正则表达式允许:

/^([0-9]|[a-z])+([0-9a-z]+)$/i
  • 字母数字
  • 只有阿尔法
  • 只有数字
于 2013-04-30T11:53:13.230 回答
6

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

不过,您应该考虑允许密码使用非字母数字字符 - 这将使它们更安全。

于 2013-04-30T12:04:16.983 回答
4

您可以使用前瞻

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

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

另请参阅:正则表达式接受至少一个字母、一个数字字符和一个特殊字符

于 2013-04-30T11:52:01.653 回答
3
var pwd = 'somevalue';
if(pwd.match("^[a-zA-Z0-9]*$")){
   alert('aplanumeric');
}
else{
   alert('Not alphanumeric');
}
于 2013-04-30T11:46:12.520 回答
3

正确的功能是

function isAlphaNumeric(str) {
  return str.match(/^[a-z0-9]+$/i) !== null;
}
于 2019-02-05T17:14:05.563 回答
0

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

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

于 2021-02-26T21:02:28.063 回答
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
于 2020-01-24T21:54:43.093 回答
0

正则表达式:

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

于 2021-10-24T03:51:45.737 回答
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]*$");

如果您检查 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");

       }

}
于 2016-05-30T10:04:31.043 回答
0

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

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

这里发生了什么?

  • \w是“词”类。

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

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

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

!/\W/.exec(data)

您也可以将表达式写为

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

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

于 2022-01-01T06:14:20.900 回答