2013-10-25 5 views
8

Was ist das standardmäßige, gültige Format des [Phone] -Attributs? In der Datentabelle ist die Telefonspalte navrchar (16) Wenn ich ein Telefon # wie 1112223333 gebe, bekomme ich "Feld ist keine gültige Telefonnummer." Wenn ich 01112223333 eingeben, bekomme ich "Der Wert '11112223333' ist ungültig."Das DataAnnotations [Phone] -Attribut

Auch, wie man es überschreibt? Ich verstehe, dass ich so etwas tun könnte, aber ist dies die beste Praxis in diesem Fall?

[RegularExpression(@"((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}",ErrorMessage="Invalid Phone Number!")] 

Verwandte Code:

[Required] 
    [Phone] 
    public string Phone { get; set; } 

    <div class="editor-field"> 
     @Html.EditorFor(model => model.Phone) 
     @Html.ValidationMessageFor(model => model.Phone) 
    </div> 

aktualisieren Ich denke, es ein Zuordnungsproblem war, als ich das Telefon Spalte von int geändert navrchar. Das Aktualisieren des Modells war nicht genug, also musste ich den Wert manuell mit dem Table Mapping ändern.

Fehler 2019: Die angegebene Memberzuordnung ist nicht gültig. Der Typ 'Edm.Int32 [Nullable = False, DefaultValue =]' des Mitglieds 'Phone' im Typ 'UserDBModel.UserProfile' ist nicht kompatibel mit 'SqlServerCe.nvarchar [Nullable = False, DefaultValue =, MaxLength = 16, Unicode = True, FixedLength = False] ' des Mitglieds' Phone 'im Typ' UserDBModel.Store.UserProfile '.

+1

Dies ist eine gute Praxis. Wenn Sie die Überprüfung des Telefons mehrmals verwenden müssen, erstellen Sie besser Ihr eigenes ValidationAttribute (PhoneNumberAttribute). – sjkm

+0

Sie haben Ihre Spalte in der DB in 'nvarchar' geändert, aber die Eigenschaft 'Phone' in 'UserDBModel.UserProfile' gelassen. 'Int' –

Antwort

9

Der Standard reguläre Ausdruck für die PhoneAttribute jetzt handlicher mit der neuen (derzeit Beta) .NET Referenzquelle zu finden ist: http://referencesource-beta.microsoft.com/#System.ComponentModel.DataAnnotations/DataAnnotations/PhoneAttribute.cs

Es zeigt es den (hässlich) Regex wie definiert ist:

private static Regex _regex = new Regex(@"^(\+\s?)?((?<!\+.*)\(\+?\d+([\s\-\.]?\d+)?\)|\d+)([\s\-\.]?(\(\d+([\s\-\.]?\d+)?\)|\d+))*(\s?(x|ext\.?)\s?\d+)?$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture); 

Das beantwortet Ihre direkte Frage, aber ob es hilft oder nicht, bleibt zu sehen. Vielleicht wäre es eine gute Basis, um Ihre eigene modifizierte Telefonnummer Regex zu erstellen.

Sample Regex Matches

+0

Was wäre eine Beispielnummer für diese Regex? Ich kann es nicht aus der Regex neu erstellen. – Megamind

+0

@Megamind, es ist irgendwie locker. Siehe meine Bearbeitung oben. –

6

Try this -

[Required(ErrorMessage = "Mobile no. is required")] 
    [RegularExpression("^(?!0+$)(\\+\\d{1,3}[- ]?)?(?!0+$)\\d{10,15}$", ErrorMessage = "Please enter valid phone no.")] 
    public string Phone { get; set; }