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.
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)
Essayez une expression régulière simple pour Mobile No
[Required (ErrorMessage="Required")]
[RegularExpression(@"^(\d{10})$", ErrorMessage = "Wrong mobile")]
public string Mobile { get; set; }
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" })
Pour afficher un numéro de téléphone au format (###) ### - ####, vous pouvez créer un nouveau HtmlHelper.
@Html.DisplayForPhone(item.Phone)
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);
}
}
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>
[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
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.
Essaye ça:
[DataType(DataType.PhoneNumber, ErrorMessage = "Provided phone number not valid")]