web-dev-qa-db-fra.com

L'attribut DataAnnotations [Phone]

Quel est le format par défaut et valide de l'attribut [Téléphone]? Dans le tableau de données, la colonne de téléphone est navrchar (16) Si j'entre un numéro de téléphone comme 1112223333, j'obtiens "le champ n'est pas un numéro de téléphone valide". Si j'entre 01112223333, j'obtiens "La valeur '11112223333' n'est pas valide."

Aussi, comment le remplacer? Je comprends que je pourrais faire quelque chose comme ça, mais est-ce la meilleure pratique dans ce cas?

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

Code associé:

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

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

Mise à jour Je suppose qu'il y a eu un problème de mappage lorsque j'ai changé la colonne du téléphone de int en navrchar. La mise à jour du modèle n'était pas suffisante, j'ai donc dû modifier la valeur manuellement à l'aide du mappage de table.

Erreur 2019: le mappage de membres spécifié n'est pas valide. Le type 'Edm.Int32 [Nullable = False, DefaultValue =]' du membre 'Phone' dans le type 'UserDBModel.UserProfile' n'est pas compatible avec 'SqlServerCe.nvarchar [Nullable = False, DefaultValue =, MaxLength = 16, Unicode = True , FixedLength = False] 'du membre' Phone 'dans le type' UserDBModel.Store.UserProfile '.

17
usefulBee

L'expression régulière par défaut de PhoneAttribute peut maintenant être facilement trouvée en parcourant le code source avec . Source de référence NET ( . NET Framework 2.7.2) ou source.dot.net (.NET Core)

Là, il montre le (laid) Regex comme étant défini comme:

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

Cela répond à votre question directe, mais si cela aide ou non reste à voir. Ce serait peut-être une bonne base pour créer votre propre regex de numéro de téléphone modifié.

Sample Regex Matches

14
Matt Tester

Essaye ça -

  [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; }
9
Sayli Vaidya