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.