5

Tôi có một mô hình:MVC xác nhận phía khách hàng cho PhoneAttribute

public class MyModel{ 
    [Phone] 
    public string MyTel { get; set; } 
} 

trong giao diện:

@model MyModel 
@Html.EditorFor(x => x.MyTel) 

HTML được tạo ra:

<input type="tel" value="" name="MyTel" id="MyTel" data-val-phone="The MyTel field is not a valid phone number." data-val="true" class="text-box single-line"/> 

khách hàng xác nhận phía cho MyTel trường không hoạt động. Làm thế nào để thực hiện công việc này?

Trả lời

7

Được hướng dẫn bởi bài viết Adding Client-Side Validation Support for PhoneAttribute or Fighting the Lookbehind in JavaScript

function initPhoneValidator() { 
    $.validator.addMethod("phone", function (value, element) { 
     if (this.optional(element)) { 
      return true; 
     } 
     var reverseValue = $.trim(value).split("").reverse().join(""); 
     var reverseRegEx = new RegExp("^(\\d+\\s?(x|\\.txe?)\\s?)?((\\)(\\d+[\\s\\-\\.]?)?\\d+\\(|\\d+)[\\s\\-\\.]?)*(\\)([\\s\\-\\.]?\\d+)?\\d+\\+?\\((?!\\+.*)|\\d+)(\\s?\\+)?$", "i"); 
     var match = reverseRegEx.exec(reverseValue); 
     return (match && (match.index === 0) && (match[0].length === value.length)); 
    }); 
    $.validator.unobtrusive.adapters.addBool("phone"); 
} 
+0

Cảm ơn. Một bình luận: Tôi không nghĩ rằng kiểm tra 'if (this.optional (...)) 'nên ở đây. Nếu được yêu cầu, cũng phải có thuộc tính '[Bắt buộc]' trên thuộc tính. Cách mã này hiện nay, việc xác nhận sẽ không bao giờ xảy ra đối với một thuộc tính không bắt buộc, mà rất có thể không phải là điều mong đợi. Nêu tôi sai vui long chân chỉnh tôi! –

+2

Regex này không hoạt động chính xác. Ví dụ, '123' vượt qua bài kiểm tra này khi nó không nên. Tôi đã kết thúc giải pháp của bạn với giải pháp này: http://stackoverflow.com/a/4338631/374198 –

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