Best way to alphanumeric check in JavaScript

后端 未结 11 2197
逝去的感伤
逝去的感伤 2020-11-28 05:09

What is the best way to perform an alphanumeric check on an INPUT field in JSP? I have attached my current code



        
相关标签:
11条回答
  • 2020-11-28 05:26

    In a tight loop, it's probably better to avoid regex and hardcode your characters:

    const CHARS = new Set("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
    function isAlphanumeric(char) {
        return CHARS.has(char);
    }
    
    0 讨论(0)
  • 2020-11-28 05:27

    You don't need to do it one at a time. Just do a test for any that are not alpha-numeric. If one is found, the validation fails.

    function validateCode(){
        var TCode = document.getElementById('TCode').value;
        if( /[^a-zA-Z0-9]/.test( TCode ) ) {
           alert('Input is not alphanumeric');
           return false;
        }
        return true;     
     }
    

    If there's at least one match of a non alpha numeric, it will return false.

    0 讨论(0)
  • 2020-11-28 05:32

    Here are some notes: The real alphanumeric string is like "0a0a0a0b0c0d" and not like "000000" or "qwertyuio".

    All the answers I read here, returned true in both cases. This is not right.

    If I want to check if my "00000" string is alphanumeric, my intuition is unquestionably FALSE.

    Why? Simple. I cannot find any letter char. So, is a simple numeric string [0-9].

    On the other hand, if I wanted to check my "abcdefg" string, my intuition is still FALSE. I don't see numbers, so it's not alphanumeric. Just alpha [a-zA-Z].

    The Michael Martin-Smucker's answer has been illuminating.

    However he was aimed at achieving better performance instead of regex. This is true, using a low level way there's a better perfomance. But results it's the same. The strings "0123456789" (only numeric), "qwertyuiop" (only alpha) and "0a1b2c3d4f4g" (alphanumeric) returns TRUE as alphanumeric. Same regex /^[a-z0-9]+$/i way. The reason why the regex does not work is as simple as obvious. The syntax [] indicates or, not and. So, if is it only numeric or if is it only letters, regex returns true.

    But, the Michael Martin-Smucker's answer was nevertheless illuminating. For me. It allowed me to think at "low level", to create a real function that unambiguously processes an alphanumeric string. I called it like PHP relative function ctype_alnum (edit 2020-02-18: Where, however, this checks OR and not AND).

    Here's the code:

    
    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
    }
    
    

    And here is a demo:

    function ctype_alnum(str) {
      var code, i, len;
        var isNumeric = false, isAlpha = false; //I assume that it is all non-alphanumeric
    
        
    loop1:
      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
    };
    
    $("#input").on("keyup", function(){
    
    if ($(this).val().length === 0) {$("#results").html(""); return false};
    var isAlphaNumeric = ctype_alnum ($(this).val());
        $("#results").html(
            (isAlphaNumeric) ? 'Yes' : 'No'
            )
            
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <input id="input">
    
    <div> is Alphanumeric? 
    <span id="results"></span>
    </div>

    This is an implementation of Michael Martin-Smucker's method in JavaScript.

    0 讨论(0)
  • 2020-11-28 05:37

    You can use this regex /^[a-z0-9]+$/i

    0 讨论(0)
  • 2020-11-28 05:39

    I would create a String prototype method:

    String.prototype.isAlphaNumeric = function() {
      var regExp = /^[A-Za-z0-9]+$/;
      return (this.match(regExp));
    };
    

    Then, the usage would be:

    var TCode = document.getElementById('TCode').value;
    return TCode.isAlphaNumeric()
    
    0 讨论(0)
  • 2020-11-28 05:42

    To check whether input_string is alphanumeric, simply use:

    input_string.match(/[^\w]|_/) == null
    
    0 讨论(0)
提交回复
热议问题