C# 电话号码验证MVC
我试图使用正则表达式验证电话号码,并在提交无效号码或电话号码时返回错误 MVC代码:C# 电话号码验证MVC,c#,regex,asp.net-mvc,jquery-validate,validationattribute,C#,Regex,Asp.net Mvc,Jquery Validate,Validationattribute,我试图使用正则表达式验证电话号码,并在提交无效号码或电话号码时返回错误 MVC代码: 电话号码: @Html.TextBoxFor(model=>model.PhoneNumber,新的{@class=“textbox”}) @Html.ValidationMessageFor(model=>model.PhoneNumber) C#代码: [数据类型(数据类型.电话号码)] [显示(Name=“电话号码”)] [必需(ErrorMessage=“需要电话号码!”)] [正则表达式(@“
电话号码:
@Html.TextBoxFor(model=>model.PhoneNumber,新的{@class=“textbox”})
@Html.ValidationMessageFor(model=>model.PhoneNumber)
C#代码:
[数据类型(数据类型.电话号码)]
[显示(Name=“电话号码”)]
[必需(ErrorMessage=“需要电话号码!”)]
[正则表达式(@“^\(([0-9]{3})\)?[-.]([0-9]{3})[-.]?([0-9]{4})$”,
ErrorMessage=“输入的电话格式无效。”)]
公共字符串PhoneNumber{get;set;}
但是,输入框不会向用户显示消息,表明提交的电话号码无效。页面上没有验证程序。添加类似这样的内容以显示验证消息
@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>
@TextBoxFor(m=>m.MobileNo,新的{@class=“formcontrol”,type=“phone”})
@Html.ValidationMessageFor(m=>m.MobileNo,“无效数字”)
@CheckBoxFor(m=>m.IsAgreeTerms,新的{@checked=“checked”,style=“display:none”})
要以(########-####格式显示电话号码,可以创建新的HtmlHelper
用法
HtmlHelper扩展
公共静态类HtmlHelperExtensions
{
公用静态HtmlString DisplayForPhone(此HtmlHelper助手,字符串电话)
{
如果(电话==null)
{
返回新的HtmlString(string.Empty);
}
字符串格式=电话;
如果(phone.Length==10)
{
格式化=$“({phone.Substring(0,3)}{phone.Substring(3,3)}-{phone.Substring(6,4)}”;
}
else if(phone.Length==7)
{
格式化=$“{phone.Substring(0,3)}-{phone.Substring(3,4)}”;
}
字符串s=$“”;
返回新的HtmlString;
}
}
尝试为Mobile No
[Required (ErrorMessage="Required")]
[RegularExpression(@"^(\d{10})$", ErrorMessage = "Wrong mobile")]
public string Mobile { get; set; }
试试这个:
[DataType(DataType.PhoneNumber, ErrorMessage = "Provided phone number not valid")]
或者您可以使用JQuery—只需将您的输入字段添加到类“phone”中,并将其放入脚本部分:
$(".phone").keyup(function () {
$(this).val($(this).val().replace(/^(\d{3})(\d{3})(\d)+$/, "($1)$2-$3"));
没有错误消息,但您可以看到,在输入全部十位数字之前,电话号码的格式不正确。[DataType(DataType.PhoneNumber)]
没有任何现成的验证逻辑
根据报告:
将DataTypeAttribute
属性应用于数据字段时,必须执行以下操作:
- 根据需要发布验证错误
[Phone]
属性继承自[DataType]
,并在.NET Framework 4.5+中引入,位于.NET Core中,它提供了自己的验证逻辑风格。所以你可以这样使用:
[Phone()]
公共字符串PhoneNumber{get;set;}
但是,电话号码的开箱即用验证是,因此您可能会发现自己想要从数据类型继承并实现自己的IsValid
方法,或者,如其他人所建议的,使用&RegexValidator
来约束输入
注意:请谨慎使用正则表达式,以防根据as.NET进行无约束输入。电话号码数据注释属性用于数据类型,与数据显示格式无关。这只是个误会。电话号码表示您可以接受用于此区域设置的电话号码的号码和符号,但不检查格式、长度、范围或其他。对于显示字符串格式,请使用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})+$/, "($1) $2-$3"));
});
});
</script>
$(文档).ready(函数(){
$(“#您的_字段_控件的_id_”).keyup(函数(){
$(this.val($(this.val()).replace(/^(\d{2})(\d{5})(\d{4})+$/,“($1)$2-$3”);
});
});
这种格式目前用于巴西的移动电话。适应你的标准
这将在字段中添加括号和空格,从而增加输入数据的字符串长度。如果只想保存数字,则必须在保存之前从字符串中删除非数字。那么会出现什么问题,我的意思是你在哪里需要帮助?输入框不会向用户显示消息,表明提交的电话号码无效。有效电话号码的标准是什么?10位数字和标准美国电话号码。当然可以。如果它解决了您的问题,请确保将此标记为答案。欢迎来到堆栈溢出!对于,如何显示?它可以将像8005551212这样的字符串转换为(800)555-1212吗?仅此数据注释是不够的吗?[数据类型(数据类型.电话号码)]。如果我们需要正则表达式进行验证,那么为什么我们需要DataType.PhoneNumber。它的用途是什么?很明显,因为不是每个国家都有相同的电话号码格式。如果必须提供进行电话号码验证的正则表达式,[DataType(DataType.PhoneNumber)]属性的用途是什么?作为一个更容易阅读的行,我使用以下代码来格式化10位电话号码:
string.format({0:(#######-#########,phone)
使用C#6+,您也可以使用您的子字符串方法:格式化=$”({phone.Substring(0,3)}phone.Substring(3,3)}-{phone.Substring(6,4)},前面格式化的字符串表示$,以及如何在中放置值调用(方法、属性等)
$(".phone").keyup(function () {
$(this).val($(this).val().replace(/^(\d{3})(\d{3})(\d)+$/, "($1)$2-$3"));
<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})+$/, "($1) $2-$3"));
});
});
</script>