실례합니다. 논란이 없습니다. 하지만 최근에 저를 성장시킨 것처럼 커뮤니티가 성장하려면 메모를하는 것이 좋습니다.
실제 영숫자 문자열은 또는 "0a0a0a0b0c0d"
같고 같지 않습니다 ."000000"
"qwertyuio"
여기에서 읽은 모든 답변 true
은 두 경우 모두 반환 되었습니다. 그리고 저를 용서하십시오, IMHO, 이것은 옳지 않습니다 .
내 "00000"
문자열이 영숫자 인지 확인하려면 "인간"대답은 의심 할 여지없이 FALSE입니다.
왜? 단순한. 문자 문자를 찾을 수 없습니다. 따라서 간단한 숫자 문자열 [0-9]
입니다.
반면에 "abcdefg"
문자열 을 확인하려면 "인간적인"대답도 거짓입니다. 숫자가 표시되지 않으므로 영숫자가 아닙니다. 그냥 알파 [a-zA-Z]
.
마이클 마틴 - Smucker의 대답은 조명하고있다.
그러나 그는 정규식 대신 더 나은 성능을 달성하는 것을 목표로 삼았습니다. 낮은 수준의 방법을 사용하면 더 나은 성능을 얻을 수 있습니다. 그러나 결과는 동일합니다. 문자열 "0123456789"
(숫자 만), "qwertyuiop"
(알파 만) 및 "0a1b2c3d4f4g"
(영숫자)는 TRUE
영숫자로 반환 됩니다. 동일한 정규식 /^[a-z0-9]+$/i
방식. 정규식이 작동하지 않는 이유는 간단합니다. 구문 []
은 or , not and를 나타냅니다 . 따라서 숫자 만 있거나 문자 만 있으면 정규식은를 반환합니다 true
.
단, 마이클 마틴 - Smucker의 대답은 그럼에도 불구하고 조명했다. 나를 위해. 영숫자 문자열을 모호하지 않게 처리하는 실제 함수를 만들기 위해 "낮은 수준"에서 생각할 수있었습니다. 나는 그것을 PHP 상대 함수처럼 불렀다 ctype_alnum
( 2020-02-18 편집 : 그러나 이것은 AND가 아닌 OR 확인 ).
코드는 다음과 같습니다.
function ctype_alnum(str) {
var code, i, len;
var isNumeric = false, isAlpha = false; //I assume that it is all non-alphanumeric
for (i = 0, len = str.length; i < len; i++) {
code = str.charCodeAt(i);
switch (true){
case code > 47 && code < 58: // check if 0-9
isNumeric = true;
break;
case (code > 64 && code < 91) || (code > 96 && code < 123): //check if A-Z or a-z
isAlpha = true;
break;
default: // not 0-9, not A-Z or a-z
return false; //stop function with false result, no more checks
}
}
return isNumeric && isAlpha; //return the loop results, if both are true, the string is certainly alphanumeric
};
... 그리고 여기에 데모가 있습니다.
나는 자바 스크립트에서 PHP 함수에 대한 대안을 찾고 있었기 때문에이 토론에 왔습니다. "ready-to-go"라는 답을 찾지 못했지만 Stackoverflow에서 자주 발생하는 것처럼 서로에 대한 지식과 비교의 개념은 숭고한 것이므로 다른 사람의 답변 에 대해 생각 하고 함께 해결책을 찾을 수 있습니다 . 찾고 있었지만 당신이 그것을 안다고 생각하지 않았습니다.
그리고 그것을 공유하십시오!
베스트
오스카