[javascript] Javascript에서 영숫자 확인하는 가장 좋은 방법

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~ 9OR 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에서 자주 발생하는 것처럼 서로에 대한 지식과 비교의 개념은 숭고한 것이므로 다른 사람의 답변 에 대해 생각 하고 함께 해결책을 찾을 수 있습니다 . 찾고 있었지만 당신이 그것을 안다고 생각하지 않았습니다.

그리고 그것을 공유하십시오!

베스트

오스카