2014-05-04 32 views
12

Tôi đang viết biểu mẫu đăng ký có chứa rất nhiều javascript. Trong khi viết các chức năng cơ bản để kiểm tra định dạng của các chuỗi nhất định, tôi đã gặp vấn đề này (tôi đã cố gắng giải quyết nó một mình nhưng không có may mắn ở đó). Trong phiên bản đơn giản này, tôi có ba chức năng: một để kiểm tra định dạng của số điện thoại, thứ hai để kiểm tra định dạng của email và thứ ba để kết hợp hai chức năng đó để làm cho nó rõ ràng hơn. Dưới đây là các mã:LoạiError: pattern.test không phải là chức năng

<html> 
<head> 
    <meta charset="utf-8"> 
    <script> 
     function filterPhone(phone){ 
      var pattern = "/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/"; 
      return pattern.test(phone); 
     } 

     function filterEmail(email) { 
      var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; 
      return regex.test(email); 
     } 

     function checkForm(){ 
      var puh = document.getElementById("puh").value; 
     var email = document.getElementById("email").value; 
      if(filterPhone(puh) && filterEmail(email)){ 
       alert("It works"); 
       return true; 
      } else { 
       alert("Check the format!"); 
       return false; 
      } 
     } 
    </script> 
</head> 
<body> 
<form method="post" action="" name="regForm" onsubmit="return checkForm()"> 
    <input type="text" name="puh" id="puh" placeholder="Phonenumber"><br> 
    <input type="text" name="email" id="email" placeholder="Email address"><br> 
    <input type="submit" value="Check!"> 
</form> 
</body> 
</html> 

Nếu tôi chỉ sử dụng chức năng filterEmail nó hoạt động tốt nhưng khi tôi sử dụng cả hai (hoặc thậm chí chỉ filterPhone!) Nó mang lại cho tôi một lỗi: "Lỗi Loại: pattern.test không phải là một hàm " (" mẫu "đề cập đến tên biến của hàm đầu tiên (filterPhone) được gọi là mẫu). Tôi đã thử bằng cách sử dụng exec() thay vì test() và thay đổi regex-pattern, không làm việc. Điều này khá lạ vì cú pháp có vẻ đúng. Tại sao có thể là lý do?

Trả lời

25

bạn pattern phải RegEx chữ (dấu ngoặc kép xung quanh rằng không nên có mặt ở đó) như thế này

var pattern = /^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/; 

Nếu không, bạn cần phải sử dụng RegExp đối tượng, với đúng đắn thoát cho \, như thế này

var pattern = new RegExp("^(()?\\d{3}())?(-|\\s)?\\d{3}(-|\\s)?\\d{4}$"); 
+0

RegEx chữ (dấu ngoặc kép xung quanh rằng không nên có mặt ở đó), đó là một cái gì đó mới cho tôi. Cảm ơn. – electroid

8

Mẫu của bạn giữ chuỗi và không phải là cụm từ thông dụng.

Làm cho nó var pattern = /^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/; (không có dấu ngoặc kép)

Các vấn đề liên quan