นี่คือบันทึกบางส่วน: ชุดตัวเลขจริงเป็นเหมือน"0a0a0a0b0c0d"
และไม่เหมือนหรือ"000000"
"qwertyuio"
คำตอบทั้งหมดที่ฉันอ่านที่นี่ส่งคืนtrue
ทั้งสองกรณี นี้ไม่ถูกต้อง
หากฉันต้องการตรวจสอบว่า"00000"
สตริงของฉันเป็นตัวเลขและตัวอักษรหรือไม่สัญชาตญาณของฉันก็ไม่ต้องสงสัยเลย
ทำไม? เรียบง่าย ฉันไม่พบตัวอักษรใด ๆ [0-9]
ดังนั้นเป็นสตริงตัวเลขที่เรียบง่าย
ในทางกลับกันถ้าฉันต้องการตรวจสอบ"abcdefg"
สตริงของฉันสัญชาตญาณของฉันก็ยังคงเป็นเท็จ ฉันไม่เห็นตัวเลขดังนั้นจึงไม่ใช่ตัวเลขและตัวอักษร [a-zA-Z]
อัลฟาเพียง
คำตอบไมเคิลมาร์ติน Smucker ของได้รับการส่องสว่าง
อย่างไรก็ตามเขามุ่งเป้าไปที่การบรรลุประสิทธิภาพที่ดีขึ้นแทนที่จะเป็น regex นี่เป็นเรื่องจริงโดยใช้วิธีระดับต่ำจะมีประสิทธิภาพที่ดีกว่า แต่ผลลัพธ์มันเหมือนกัน สตริง"0123456789"
(เฉพาะตัวเลข) "qwertyuiop"
(เฉพาะอัลฟา) และ"0a1b2c3d4f4g"
(ตัวอักษรและตัวเลข) จะแสดงผลTRUE
เป็นตัวอักษรและตัวเลข /^[a-z0-9]+$/i
วิธีregex เดียวกัน สาเหตุที่ regex ไม่ทำงานนั้นง่ายอย่างที่เห็นได้ชัด ไวยากรณ์[]
บ่งชี้หรือไม่และ ดังนั้นถ้ามันเป็นเพียงตัวเลขหรือtrue
ถ้ามันเป็นตัวอักษรเท่านั้นผลตอบแทน regex
แต่คำตอบของ Michael Martin-Smuckerก็ยังส่องสว่าง สำหรับฉัน. มันช่วยให้ฉันคิดที่ "ระดับต่ำ" เพื่อสร้างฟังก์ชันจริงที่ประมวลผลสตริงตัวอักษรและตัวเลขอย่างไม่น่าสงสัย ฉันเรียกมันว่าเป็นฟังก์ชันสัมพัทธ์ของ PHP ctype_alnum
( แก้ไข 2020-02-18: อย่างไรก็ตามสิ่งนี้ตรวจสอบหรือไม่ใช่ AND )
นี่คือรหัส:
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
}
และนี่คือการสาธิต:
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>
นี่คือการนำวิธีการของMichael Martin-Smucker ไปใช้ใน JavaScript