Câu hỏi Cách tốt nhất để kiểm tra chữ và số trong Javascript


Bạn có thể đề xuất cách tốt nhất có thể để thực hiện kiểm tra số alpha trên trường INPUT trong JSP không? Tôi đã đính kèm mã hiện tại của tôi và tôi biết nó không có nơi gần hoàn hảo :)

<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;     
   }


76
2017-12-13 22:23


gốc


Phụ thuộc vào cách bạn xác định "tốt nhất". Hầu hết các câu trả lời dưới đây đều đề xuất regex, thực hiện chậm hơn nhiều so với mã ban đầu của bạn. tôi có dọn dẹp mã của bạn một chút, thực sự hoạt động rất tốt. - Michael Martin-Smucker


Các câu trả lời:


Bạn có thể dùng regex này  /^[a-z0-9]+$/i


74
2017-12-13 22:26



tất nhiên điều này giả định rằng chuỗi rỗng ("") không được khớp. - zzzzBov
ñ không rơi vào mô hình tuy nhiên char UTF-8 hoàn toàn hợp lệ. - Oybek
/ ^ [a-z0-9] + $ / i.test (TCode) - Alex V
Thử nghiệm cụm từ thông dụng có vẻ chậm hơn nhiều (66% trong Chrome 36) so với charCodeAt(). Xem jsPerf và câu trả lời của tôi bên dưới. - Michael Martin-Smucker
Regex này không hoạt động với các ký tự đặc biệt được sử dụng trong một số ngôn ngữ, như "ą", "ź", "ć", v.v. - Rafał Swacha


Độ nghiêng ban đầu của người hỏi để sử dụng str.charCodeAt(i) dường như nhanh hơn so với cụm từ thông dụng thay thế. Trong thử nghiệm của tôi trên jsPerf tùy chọn RegExp thực hiện chậm hơn 66% trong Chrome 36 (và hơi chậm trong Firefox 31).

Đây là phiên bản đã được làm sạch của mã xác thực ban đầu nhận được chuỗi và trả về true hoặc là 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;
};

Tất nhiên, có thể có những cân nhắc khác, chẳng hạn như khả năng đọc. Biểu thức chính quy một dòng chắc chắn dễ nhìn hơn. Nhưng nếu bạn đang nghiêm túc quan tâm đến tốc độ, bạn có thể muốn xem xét thay thế này.


46
2017-08-17 18:26



Các lập trình viên thích giao diện mã, nhưng bạn thấy vẻ đẹp bên trong của nó. - Ziggy


Bạn không cần phải làm điều đó tại một thời điểm. Chỉ cần làm một bài kiểm tra cho bất kỳ không phải alpha-số. Nếu được tìm thấy, xác thực không thành công.

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

Nếu có ít nhất một kết hợp của một số không phải alpha, nó sẽ return false.


30
2017-12-13 22:52





Kiểm tra nó với một regex.

Javascript regexen không có các lớp nhân vật POSIX, do đó bạn phải viết các dãy ký tự theo cách thủ công:

if (!input_string.match(/^[0-9a-z]+$/))
  show_error_or_something()

Đây ^ có nghĩa là bắt đầu chuỗi và $ có nghĩa là kết thúc chuỗi, và [0-9a-z]+ có nghĩa là một hoặc nhiều nhân vật từ 0 đến 9 Hoặc từ a đến z.

Thông tin thêm về Javascript regexen tại đây: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions


27
2017-12-28 08:44



1 để giải thích regex cơ bản và liên kết với hướng dẫn, thay vì cung cấp cho người dùng "chuỗi ma thuật". - Charles Burns
bạn cần thêm A-Z - inor
@inor bạn chỉ có thể thêm 'i' vào cuối regex để chỉ định trường hợp không nhạy cảm, .i.e. /^[a-z0-9]+$/i và điều này sẽ bao gồm cả chữ thường và chữ thường - LJH


    // 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);
    }

Thêm nữa, bài viết này cũng giúp hiểu được xác thực chữ và số JavaScript.


5
2017-12-29 04:27





Tôi sẽ tạo ra một phương thức nguyên mẫu String:

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

Sau đó, việc sử dụng sẽ là:

var TCode = document.getElementById('TCode').value;
return TCode.isAlphaNumeric()

5
2018-01-04 18:30



JavaScript có thể duy trì: Không sửa đổi các đối tượng bạn không sở hữu - SeinopSys
DJDavid98: Tôi không nghĩ rằng quy tắc "không sửa đổi các đối tượng bạn không sở hữu" được áp dụng ở đây. Justin đã chỉ mở rộng khả năng của String, không sửa đổi các chức năng hiện có. Đối với quan điểm, trong thế giới C #, điều đó sẽ được coi là một cách sử dụng hoàn toàn hợp lệ của một phương pháp mở rộng. Thậm chí nếu một ngày nào đó "String.isAlphaNumeric (): boolean" sẽ được các nhà sản xuất trình duyệt triển khai, thì chữ ký cũng như hành động sẽ không thay đổi, vì vậy tôi không thể thấy bất kỳ sự giảm khả năng bảo trì nào trong ví dụ cụ thể này. Cái gì đó là một quy tắc không ngụ ý rằng không có ngoại lệ. - Risto Välimäki