Проверка номера телефона MVC
Код 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>
Код С#
[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; }
Я пытаюсь использовать регулярное выражение для проверки номера телефона и возврата ошибки при отправке неверного номера или номера телефона. Я чувствую, что я очень близко, но не могу заставить это работать.
В поле ввода не отображается сообщение пользователю, указывающее, что номер телефона, который был отправлен, недействителен.
Ответы
Ответ 1
Model
[Required(ErrorMessage = "Your must provide a PhoneNumber")]
[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; }
Вид:
@Html.LabelFor(model => model.PhoneNumber)
@Html.EditorFor(model => model.PhoneNumber)
@Html.ValidationMessageFor(model => model.PhoneNumber)
Ответ 2
У вас нет валидатора на странице. Добавьте что-то вроде этого, чтобы отобразить сообщение проверки.
@Html.ValidationMessageFor(model => model.PhoneNumber, "", new { @class = "text-danger" })
Ответ 3
Наряду с приведенными выше ответами
Попробуйте это для минимальной и максимальной длины:
В модели
[StringLength(13, MinimumLength=10)]
public string MobileNo { get; set; }
В поле зрения
<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>
Ответ 4
Чтобы отобразить номер телефона с форматом (###) ### - ####, вы можете создать новый HtmlHelper.
Использование
@Html.DisplayForPhone(item.Phone)
Расширение HtmlHelper
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);
}
}
Ответ 5
Попробуйте простое регулярное выражение для Mobile No
[Required (ErrorMessage="Required")]
[RegularExpression(@"^(\d{10})$", ErrorMessage = "Wrong mobile")]
public string Mobile { get; set; }
Ответ 6
Попробуйте следующее:
[DataType(DataType.PhoneNumber, ErrorMessage = "Provided phone number not valid")]
Ответ 7
Или вы можете использовать JQuery - просто добавьте свое поле ввода в класс "phone" и поместите это в свой раздел script:
$(".phone").keyup(function () {
$(this).val($(this).val().replace(/^(\d{3})(\d{3})(\d)+$/, "($1)$2-$3"));
Нет сообщения об ошибке, но вы можете видеть, что номер телефона не был правильно отформатирован, пока вы не ввели все десять цифр.