Xin lỗi tất cả, không bàn cãi. Nhưng để cộng đồng phát triển như tôi đã phát triển trong những năm này, tốt hơn hết là bạn nên ghi một số ghi chú.
Chuỗi chữ và số thực giống "0a0a0a0b0c0d"
và không giống "000000"
hoặc "qwertyuio"
.
Tất cả các câu trả lời tôi đọc ở đây, được trả lại true
trong cả hai trường hợp. Và tha thứ cho tôi, IMHO, điều này không đúng .
Nếu tôi muốn kiểm tra xem "00000"
chuỗi của mình có phải là alphanum hay không, câu trả lời "con người" của tôi chắc chắn là FALSE.
Tại sao? Đơn giản. Tôi không thể tìm thấy bất kỳ ký tự ký tự nào. Vì vậy, là một chuỗi số đơn giản [0-9]
.
Mặt khác, nếu tôi muốn kiểm tra "abcdefg"
chuỗi của mình, câu trả lời "con người" của tôi thậm chí là FALSE. Tôi không thấy số, vì vậy nó không phải là chữ và số. Chỉ là alpha [a-zA-Z]
.
Các câu trả lời Michael Martin-Smucker của đã được sáng tỏ.
Tuy nhiên, anh ấy nhắm đến việc đạt được hiệu suất tốt hơn thay vì regex. Điều này đúng, sử dụng cách cấp thấp sẽ có hiệu suất tốt hơn. Nhưng kết quả là như nhau. Các chuỗi "0123456789"
(chỉ số), "qwertyuiop"
(chỉ alpha) và "0a1b2c3d4f4g"
(chữ và số) trả về TRUE
dưới dạng chữ và số. Cùng một /^[a-z0-9]+$/i
cách regex . Lý do tại sao regex không hoạt động rất đơn giản. Cú pháp []
cho biết hoặc , không và . Vì vậy, nếu nó chỉ là số hoặc nếu nó chỉ là các chữ cái, thì trả về regex true
.
Nhưng, câu trả lời của Michael Martin-Smucker vẫn làm sáng tỏ. Cho tôi. Nó cho phép tôi suy nghĩ ở "cấp độ thấp", để tạo ra một hàm thực sự xử lý rõ ràng một chuỗi chữ và số. Tôi đã gọi nó giống như hàm tương đối trong PHP ctype_alnum
( chỉnh sửa 2020-02-18: Tuy nhiên, ở đâu, hàm này kiểm tra HOẶC chứ không phải VÀ ).
Đây là mã:
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
};
... và đây là DEMO
Tôi đến với cuộc thảo luận này vì tôi đang tìm kiếm một giải pháp thay thế trong javascript cho hàm PHP. Tôi không tìm thấy câu trả lời là "sẵn sàng để thực hiện", nhưng như thường lệ xảy ra trên Stackoverflow, khái niệm kiến thức và sự so sánh với nhau là một điều gì đó cao siêu, khiến bạn phải suy nghĩ về câu trả lời của ai đó và cùng nhau tìm ra giải pháp cho chính bạn. đang tìm kiếm, nhưng bạn không nghĩ rằng bạn biết điều đó.
Và chia sẻ nó!
Tốt
Oscar