2013-10-25 15 views
8

Qual è il formato valido predefinito dell'attributo [Telefono]? Nella tabella dei dati, la colonna del telefono è navrchar (16) Se inserisco un numero di telefono come 1112223333, ottengo "il campo non è un numero di telefono valido". Se inserisco 01112223333, ottengo "Il valore '11112223333' non è valido."L'attributo DataAnnotations [Telefono]

Inoltre, come sovrascriverlo? Capisco che potrei fare qualcosa di simile, ma è questa la migliore pratica in questo caso?

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

codice correlate:

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

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

Aggiornamento Credo che c'era un problema di mappatura quando ho cambiato la colonna telefono da int a navrchar. L'aggiornamento del modello non è stato sufficiente, quindi ho dovuto modificare manualmente il valore utilizzando il mapping delle tabelle.

Errore 2019: Mappatura membro specificata non valida. Il tipo 'Edm.Int32 [Nullable = False, DefaultValue =]' del membro 'Telefono' nel tipo 'UserDBModel.UserProfile' non è compatibile con 'SqlServerCe.nvarchar [Nullable = False, DefaultValue =, MaxLength = 16, Unicode = True, FixedLength = False] ' del membro' Phone 'nel tipo' UserDBModel.Store.UserProfile '.

+1

Questa è una buona pratica. Se è necessario utilizzare la convalida del telefono più volte che meglio creare il proprio ValidationAttribute (PhoneNumberAttribute). – sjkm

+0

Hai cambiato la colonna nel DB in 'nvarchar' ma hai lasciato la proprietà 'Phone' in' UserDBModel.UserProfile' an' int' –

risposta

9

L'espressione regolare di default per il PhoneAttribute può ora essere comodamente trovato utilizzando la nuova (attualmente beta) .NET Fonte Riferimento: http://referencesource-beta.microsoft.com/#System.ComponentModel.DataAnnotations/DataAnnotations/PhoneAttribute.cs

Ci si illustra il (brutto) Regex ad essere definito come:

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

Questo risponde alla tua domanda diretta, ma se rimane utile o meno resta da vedere. Forse sarebbe una buona base per creare il tuo numero di telefono modificato, regex.

Sample Regex Matches

+0

Quale sarebbe un numero di campione per quell'espressione regolare? Non riesco a ricrearlo dalla regex. – Megamind

+0

@Megamind, è piuttosto sciolto. Vedi la mia modifica sopra. –

6

Prova questo -

[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; } 
Problemi correlati