5

Ich habe ein Modell:MVC Clientseite Validierung für PhoneAttribute

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

in der Ansicht:

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

die HTML generiert:

<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"/> 

die Client-seitige Validierung für die MyTel Feld funktioniert nicht. Wie funktioniert das?

Antwort

7

von Artikel Geführte 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

Dank. Ein Kommentar: Ich denke nicht, dass der 'if (this.optional (...))' Check hier sein sollte. Wenn es erforderlich ist, sollte auch ein Attribut "[Erforderlich]" in der Eigenschaft vorhanden sein. Die Art und Weise, wie dieser Code jetzt ist, wird niemals für eine nicht benötigte Eigenschaft durchgeführt, was höchstwahrscheinlich nicht das ist, was man erwarten würde. Bitte korrigiere mich wenn ich falsch liege! –

+2

Diese Regex funktioniert nicht korrekt. Zum Beispiel, "123" besteht diesen Test, wenn es nicht sollte. Ich habe Ihre Lösung mit dieser kombiniert: http://stackoverflow.com/a/4338631/374198 –