INPUT
필드에서 영숫자 확인을 수행하는 가장 좋은 방법은 무엇입니까 JSP
? 현재 코드를 첨부했습니다.
<script type="text/javascript">
function validateCode(){
var TCode = document.getElementById('TCode').value;
for(var i=0; i<TCode.length; i++)
{
var char1 = TCode.charAt(i);
var cc = char1.charCodeAt(0);
if((cc>47 && cc<58) || (cc>64 && cc<91) || (cc>96 && cc<123))
{
}
else {
alert('Input is not alphanumeric');
return false;
}
}
return true;
}
답변
이 정규식을 사용할 수 있습니다. /^[a-z0-9]+$/i
답변
asker의 원래 사용 성향 str.charCodeAt(i)
은 정규 표현식 대안보다 빠릅니다. 에서 jsPerf에 내 테스트 (약간 느린 파이어 폭스 31과) 크롬 36에서 정규 표현식 옵션을 수행하는 66 % 느리게.
다음은 문자열을 수신하고 true
또는 반환하는 원래 유효성 검사 코드의 정리 된 버전입니다 false
.
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;
};
물론 가독성과 같은 다른 고려 사항이있을 수 있습니다. 한 줄로 된 정규식은 확실히보기에 더 예쁘다. 그러나 속도에 엄격하게 관심이 있다면이 대안을 고려할 수 있습니다.
답변
정규식으로 확인하십시오.
Javascript regexen에는 POSIX 문자 클래스가 없으므로 문자 범위를 수동으로 작성해야합니다.
if (!input_string.match(/^[0-9a-z]+$/))
show_error_or_something()
여기서는 ^
문자열의 시작을 의미하고 문자열의 $
끝을 [0-9a-z]+
의미하며 0
~ 9
OR a
~ ~ 까지의 문자 중 하나 이상을 의미 합니다 z
.
Javascript regexen에 대한 자세한 내용은 https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions를 참조 하십시오.
답변
한 번에 하나씩 수행 할 필요가 없습니다. 영숫자 가 아닌 항목에 대해 테스트를 수행하십시오 . 발견되면 유효성 검사가 실패합니다.
function validateCode(){
var TCode = document.getElementById('TCode').value;
if( /[^a-zA-Z0-9]/.test( TCode ) ) {
alert('Input is not alphanumeric');
return false;
}
return true;
}
알파벳이 아닌 숫자와 일치하는 항목이 하나 이상 있으면 return false
.
답변
String 프로토 타입 메서드를 만듭니다.
String.prototype.isAlphaNumeric = function() {
var regExp = /^[A-Za-z0-9]+$/;
return (this.match(regExp));
};
그런 다음 사용법은 다음과 같습니다.
var TCode = document.getElementById('TCode').value;
return TCode.isAlphaNumeric()
답변
// On keypress event call the following method
function AlphaNumCheck(e) {
var charCode = (e.which) ? e.which : e.keyCode;
if (charCode == 8) return true;
var keynum;
var keychar;
var charcheck = /[a-zA-Z0-9]/;
if (window.event) // IE
{
keynum = e.keyCode;
}
else {
if (e.which) // Netscape/Firefox/Opera
{
keynum = e.which;
}
else return true;
}
keychar = String.fromCharCode(keynum);
return charcheck.test(keychar);
}
또한 이 기사 는 JavaScript 영숫자 유효성 검사를 이해하는데도 도움 이 됩니다.
답변
실례합니다. 논란이 없습니다. 하지만 최근에 저를 성장시킨 것처럼 커뮤니티가 성장하려면 메모를하는 것이 좋습니다.
실제 영숫자 문자열은 또는 "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에서 자주 발생하는 것처럼 서로에 대한 지식과 비교의 개념은 숭고한 것이므로 다른 사람의 답변 에 대해 생각 하고 함께 해결책을 찾을 수 있습니다 . 찾고 있었지만 당신이 그것을 안다고 생각하지 않았습니다.
그리고 그것을 공유하십시오!
베스트
오스카