我想检查一个字符串在 javascript 中是否为严格字母。我试过这个:
var Exp = /^[0-9a-z]+$/;
if(!pwd.match(Exp))
alert("ERROR")
但是这样做的问题是,如果它包含所有字母或所有数字,它会传递输入字符串,如果它同时包含字符和数字,我希望函数通过。
我想检查一个字符串在 javascript 中是否为严格字母。我试过这个:
var Exp = /^[0-9a-z]+$/;
if(!pwd.match(Exp))
alert("ERROR")
但是这样做的问题是,如果它包含所有字母或所有数字,它会传递输入字符串,如果它同时包含字符和数字,我希望函数通过。
试试这个正则表达式:
/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+[0-9a-z]+$/i
仅允许字母数字。
它不允许:
参考现场演示
下面的正则表达式允许:
/^([0-9]|[a-z])+([0-9a-z]+)$/i
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
不过,您应该考虑允许密码使用非字母数字字符 - 这将使它们更安全。
您可以使用前瞻:
/^(?=.*?[a-z])(?=.*?\d)[a-z\d]+$/i
^^^^^^^^^^ ^^^^^^^
at least at least
one letter one digit
仅供参考,限制密码的允许字符会大大减少熵(现在只有 36 个不同的字符),因此使它们更容易破解。不要做这个限制。检查字符串是否包含某种类型的字符很好(嗯,有一些理论认为这也会降低熵,但我对此没有足够的了解)。
var pwd = 'somevalue';
if(pwd.match("^[a-zA-Z0-9]*$")){
alert('aplanumeric');
}
else{
alert('Not alphanumeric');
}
正确的功能是
function isAlphaNumeric(str) {
return str.match(/^[a-z0-9]+$/i) !== null;
}
这适用于任意数量的字符(与接受的答案相反)
/^[a-z0-9]*$/i
一个非常简单的方法来做到这一点没有正则表达式:
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
正则表达式:
/^[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;
};
字符串 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");
}
}
我讨厌成为那个人,但我也讨厌在这里找到的所有答案,所以这是我的。
function isalnum(data) {
return !/\W|_/.exec(data)
}
这里发生了什么?
\w
是“词”类。
_
)的快捷方式[A-za-z0-9_]
\W
它是“单词”类的“否定”形式。
[^A-za-z0-9_]
集合论 101
如果您不介意接受下划线并且只是清理一些输入,您可以使用
!/\W/.exec(data)
您也可以将表达式写为
!data.match(/\W|_/)
为什么,是的,我喜欢正则表达式。