Phone 数字验证 MVC
Phone Number Validation MVC
我正在尝试使用正则表达式来验证 phone 号码,并在提交无效号码或 phone 号码时出现 return 错误。
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>
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; }
但是,输入框不会向用户显示一条消息,表明提交的 phone 号码无效。
您的页面上没有验证器。添加类似这样的内容以显示验证消息。
@Html.ValidationMessageFor(model => model.PhoneNumber, "", new { @class = "text-danger" })
型号
[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; }
查看:
@Html.LabelFor(model => model.PhoneNumber)
@Html.EditorFor(model => model.PhoneNumber)
@Html.ValidationMessageFor(model => model.PhoneNumber)
连同上述答案
试试这个最小和最大长度:
模型中
[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>
要以 (###) ###-#### 格式显示 phone 数字,您可以创建一个新的 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);
}
}
尝试使用手机号码的简单正则表达式
[Required (ErrorMessage="Required")]
[RegularExpression(@"^(\d{10})$", ErrorMessage = "Wrong mobile")]
public string Mobile { get; set; }
试试这个:
[DataType(DataType.PhoneNumber, ErrorMessage = "Provided phone number not valid")]
或者您可以使用 JQuery - 只需将您的输入字段添加到 class "phone" 并将其放入您的脚本部分:
$(".phone").keyup(function () {
$(this).val($(this).val().replace(/^(\d{3})(\d{3})(\d)+$/, "()-"));
没有错误消息,但您可以看到 phone 号码的格式不正确,直到您输入了全部十位数字。
[DataType(DataType.PhoneNumber)]
没有任何开箱即用的验证逻辑。
根据 docs:
When you apply the DataTypeAttribute
attribute to a data field you must do the following:
- Issue validation errors as appropriate.
[Phone]
属性继承自 [DataType]
,并在 .NET Framework 4.5+ 和 .NET Core 中引入,后者确实提供了自己的验证逻辑风格。所以你可以这样使用:
[Phone()]
public string PhoneNumber { get; set; }
但是,Phone 数字的开箱即用验证是 pretty permissive, so you might find yourself wanting to inherit from DataType and implement your own IsValid
method or, as others have suggested here, use a regular expression & RegexValidator
以限制输入。
注意:根据best practices as .NET has made the pivot away from regular expressions in their own internal validation logic for phone numbers
,请谨慎使用 Regex 以防止不受约束的输入
phone数字数据注释属性是针对数据类型的,与数据显示格式无关。这只是一个误会。 Phone number 表示您可以接受用于此区域设置的 phone 数字的数字和符号,但不检查格式、长度、范围或其他。对于显示字符串格式,使用 javascript 以获得更动态的用户交互,或 MVC 掩码插件,或仅正确使用显示格式字符串。
如果您是 MVC 编程的新手,请将这段代码放在视图文件 (.cshtml) 的末尾,然后看看它的神奇之处:
<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
<script type="text/javascript">
$(document).ready(function () {
$("#the_id_of_your_field_control").keyup(function () {
$(this).val($(this).val().replace(/^(\d{2})(\d{5})(\d{4})+$/, "() -"));
});
});
</script>
这种格式目前用于巴西的 phone 手机。适应您的标准。
这会将括号和空格添加到您的字段中,这会增加输入数据的字符串长度。如果您只想保存数字,则必须在保存前 trim 从字符串中删除非数字。
我正在尝试使用正则表达式来验证 phone 号码,并在提交无效号码或 phone 号码时出现 return 错误。
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>
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; }
但是,输入框不会向用户显示一条消息,表明提交的 phone 号码无效。
您的页面上没有验证器。添加类似这样的内容以显示验证消息。
@Html.ValidationMessageFor(model => model.PhoneNumber, "", new { @class = "text-danger" })
型号
[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; }
查看:
@Html.LabelFor(model => model.PhoneNumber)
@Html.EditorFor(model => model.PhoneNumber)
@Html.ValidationMessageFor(model => model.PhoneNumber)
连同上述答案 试试这个最小和最大长度:
模型中
[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>
要以 (###) ###-#### 格式显示 phone 数字,您可以创建一个新的 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);
}
}
尝试使用手机号码的简单正则表达式
[Required (ErrorMessage="Required")]
[RegularExpression(@"^(\d{10})$", ErrorMessage = "Wrong mobile")]
public string Mobile { get; set; }
试试这个:
[DataType(DataType.PhoneNumber, ErrorMessage = "Provided phone number not valid")]
或者您可以使用 JQuery - 只需将您的输入字段添加到 class "phone" 并将其放入您的脚本部分:
$(".phone").keyup(function () {
$(this).val($(this).val().replace(/^(\d{3})(\d{3})(\d)+$/, "()-"));
没有错误消息,但您可以看到 phone 号码的格式不正确,直到您输入了全部十位数字。
[DataType(DataType.PhoneNumber)]
没有任何开箱即用的验证逻辑。
根据 docs:
When you apply the
DataTypeAttribute
attribute to a data field you must do the following:
- Issue validation errors as appropriate.
[Phone]
属性继承自 [DataType]
,并在 .NET Framework 4.5+ 和 .NET Core 中引入,后者确实提供了自己的验证逻辑风格。所以你可以这样使用:
[Phone()]
public string PhoneNumber { get; set; }
但是,Phone 数字的开箱即用验证是 pretty permissive, so you might find yourself wanting to inherit from DataType and implement your own IsValid
method or, as others have suggested here, use a regular expression & RegexValidator
以限制输入。
注意:根据best practices as .NET has made the pivot away from regular expressions in their own internal validation logic for phone numbers
,请谨慎使用 Regex 以防止不受约束的输入phone数字数据注释属性是针对数据类型的,与数据显示格式无关。这只是一个误会。 Phone number 表示您可以接受用于此区域设置的 phone 数字的数字和符号,但不检查格式、长度、范围或其他。对于显示字符串格式,使用 javascript 以获得更动态的用户交互,或 MVC 掩码插件,或仅正确使用显示格式字符串。
如果您是 MVC 编程的新手,请将这段代码放在视图文件 (.cshtml) 的末尾,然后看看它的神奇之处:
<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
<script type="text/javascript">
$(document).ready(function () {
$("#the_id_of_your_field_control").keyup(function () {
$(this).val($(this).val().replace(/^(\d{2})(\d{5})(\d{4})+$/, "() -"));
});
});
</script>
这种格式目前用于巴西的 phone 手机。适应您的标准。
这会将括号和空格添加到您的字段中,这会增加输入数据的字符串长度。如果您只想保存数字,则必须在保存前 trim 从字符串中删除非数字。