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

code MVC

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

C# Code

    [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; }
    public string PolicyNumber { get; set; }
    public string AddressChangeType { get; set; }

j'essaie d'utiliser une expression régulière pour valider un numéro de téléphone et retourner une erreur lorsqu'un numéro de téléphone ou un numéro de téléphone non valide est soumis. Je me sens comme je suis très proche, mais ne peut pas obtenir que cela fonctionne.

la boîte de saisie n'affichera pas un message à l'utilisateur indiquant que le numéro de téléphone qui a été soumis n'est pas valide.

25
demandé sur Jonathan Kittell 2015-03-06 21:00:41

7 réponses

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

Vue:

@Html.LabelFor(model => model.PhoneNumber)
@Html.EditorFor(model => model.PhoneNumber)
@Html.ValidationMessageFor(model => model.PhoneNumber)
62
répondu meda 2018-04-05 04:02:59

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
répondu DLeh 2015-03-06 18:13:37

Essayez pour une simple expression régulière pour le Mobile N

[Required (ErrorMessage="Required")]
[RegularExpression(@"^(\d{10})$", ErrorMessage = "Wrong mobile")]
public string Mobile { get; set; }
5
répondu Slan 2016-06-15 08:18:09

ainsi que les réponses ci-dessus Essayez ceci pour la longueur min et max:

Modèle

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

view

 <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
répondu Darshan 2015-12-31 11:28:05

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

Utilisation

@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);
    }
}
3
répondu Jess 2017-12-29 21:46:26

essaye ceci:

[DataType(DataType.PhoneNumber, ErrorMessage = "Provided phone number not valid")]
1
répondu Slan 2016-06-15 08:52:09

Ou vous pouvez utiliser JQuery - il suffit d'ajouter votre entrée à la catégorie "téléphone", et le mettez dans votre section de script:

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

il n'y a pas de message d'erreur mais vous pouvez voir que le numéro de téléphone n'est pas correctement formaté jusqu'à ce que vous ayez entré les dix chiffres.

1
répondu Thomas Fonseca 2016-07-01 20:42:29