web-dev-qa-db-fra.com

Validation du numéro de téléphone MVC

J'essaie d'utiliser une expression régulière pour valider un numéro de téléphone et renvoyer une erreur lorsqu'un numéro ou un numéro de téléphone non valide est soumis.

Code MVC:

<ol class="row">
    <li class="cell" style="width: 20%;">Phone Number:</li>
    <li class="cell last" style="width: 60%;">
        @Html.TextBoxFor(model => model.PhoneNumber, new { @class = "textbox" }) 
        @Html.ValidationMessageFor(model => model.PhoneNumber)
    </li>
</ol>

Code C #:

[DataType(DataType.PhoneNumber)]
[Display(Name = "Phone Number")]
[Required(ErrorMessage = "Phone Number Required!")]
[RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$",
                   ErrorMessage = "Entered phone format is not valid.")]
public string PhoneNumber { get; set; }

Toutefois, la zone de saisie n’affichera pas de message à l’utilisateur indiquant que le numéro de téléphone soumis n’est pas valide.

28

Modèle

[Required(ErrorMessage = "You must provide a phone number")]
[Display(Name = "Home Phone")]
[DataType(DataType.PhoneNumber)]
[RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Not a valid phone number")]
public string PhoneNumber { get; set; }

Voir:

@Html.LabelFor(model => model.PhoneNumber)
@Html.EditorFor(model => model.PhoneNumber)
@Html.ValidationMessageFor(model => model.PhoneNumber)
66
meda

Essayez une expression régulière simple pour Mobile No

[Required (ErrorMessage="Required")]
[RegularExpression(@"^(\d{10})$", ErrorMessage = "Wrong mobile")]
public string Mobile { get; set; }
6
Slan

Vous n'avez pas de validateur sur la page. Ajoutez quelque chose comme ceci pour afficher le message de validation.

@Html.ValidationMessageFor(model => model.PhoneNumber, "", new { @class = "text-danger" })
5
DLeh

Pour afficher un numéro de téléphone au format (###) ### - ####, vous pouvez créer un nouveau HtmlHelper.

Usage

@Html.DisplayForPhone(item.Phone)

HtmlHelper Extension

public static class HtmlHelperExtensions
{
    public static HtmlString DisplayForPhone(this HtmlHelper helper, string phone)
    {
        if (phone == null)
        {
            return new HtmlString(string.Empty);
        }
        string formatted = phone;
        if (phone.Length == 10)
        {
            formatted = $"({phone.Substring(0,3)}) {phone.Substring(3,3)}-{phone.Substring(6,4)}";
        }
        else if (phone.Length == 7)
        {
            formatted = $"{phone.Substring(0,3)}-{phone.Substring(3,4)}";
        }
        string s = $"<a href='tel:{phone}'>{formatted}</a>";
        return new HtmlString(s);
    }
}
4
Jess

Avec les réponses ci-dessus Essayez ceci pour les longueurs min et max:

Dans le modèle

[StringLength(13, MinimumLength=10)]
public string MobileNo { get; set; }

En vue

 <div class="col-md-8">
           @Html.TextBoxFor(m => m.MobileNo, new { @class = "form-control" , type="phone"})
           @Html.ValidationMessageFor(m => m.MobileNo,"Invalid Number")
           @Html.CheckBoxFor(m => m.IsAgreeTerms, new {@checked="checked",style="display:none" })
  </div>
3
Darshan

[DataType(DataType.PhoneNumber)] ne contient aucune logique de validation.

Selon le docs :

Lorsque vous appliquez l'attribut DataTypeAttribute à un champ de données, vous devez procéder comme suit:

  • Émettez des erreurs de validation, le cas échéant.

Le [Phone] L'attribut hérite de [DataType] et a été introduit dans .NET Framework 4.5+ et dans .NET Core, qui fournit sa propre variante de la logique de validation. Donc, vous pouvez utiliser comme ceci:

[Phone()]
public string PhoneNumber { get; set; }

Cependant, la validation prête à l'emploi pour les numéros de téléphone est assez permissive , vous pourriez donc vouloir hériter de DataType et implémenter votre propre méthode IsValid ou, comme d'autres ont suggéré ici, utilisez un expression régulière & RegexValidator pour contraindre l’entrée.

Remarque : faites preuve de prudence lorsque vous utilisez Regex pour éviter les saisies illimitées selon meilleures pratiques , car .NET a activé le pivot). à partir d'expressions régulières dans leur propre logique de validation interne pour les numéros de téléphone

1
KyleMit

Ou vous pouvez utiliser JQuery - ajoutez simplement votre champ de saisie à la classe "téléphone" et mettez ceci dans votre section de script:

$(".phone").keyup(function () {
        $(this).val($(this).val().replace(/^(\d{3})(\d{3})(\d)+$/, "($1)$2-$3"));

Il n'y a pas de message d'erreur, mais vous pouvez constater que le numéro de téléphone n'est pas correctement formaté tant que vous n'avez pas entré les dix chiffres.

1
Thomas Fonseca

Essaye ça:

[DataType(DataType.PhoneNumber, ErrorMessage = "Provided phone number not valid")]
1
Slan