电话号码验证MVC

本文关键字:MVC 验证 电话号码 | 更新日期: 2024-10-19 19:12:02

我正在尝试使用正则表达式验证电话号码,并在提交无效号码或电话号码时返回错误。

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

但是,输入框不会向用户显示一条消息,指示提交的电话号码无效。

电话号码验证MVC

型号

[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)

为Mobile No 尝试简单的正则表达式

[Required (ErrorMessage="Required")]
[RegularExpression(@"^('d{10})$", ErrorMessage = "Wrong mobile")]
public string Mobile { get; set; }

页面上没有验证器。添加类似的内容以显示验证消息。

@Html.ValidationMessageFor(model => model.PhoneNumber, "", new { @class = "text-danger" })

连同以上答案试试这个最小和最大长度:

模型内

[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>

试试这个:

[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()]
public string PhoneNumber { get; set; }

然而,电话号码的开箱即用验证是非常宽松的,所以您可能会发现自己想要从DataType继承并实现自己的IsValid方法,或者,正如其他人在这里建议的那样,使用正则表达式&CCD_ 6来约束输入。

注意:根据最佳实践,对Regex要小心,不要进行无约束的输入,因为.NET在其自己的电话号码内部验证逻辑中已经从正则表达式转向了

电话号码数据注释属性用于数据类型,与数据显示格式无关。这只是一个误会。电话号码意味着您可以接受用于此区域设置的电话号码的数字和符号,但不检查格式、长度、范围或其他内容。对于显示字符串格式,请使用javascript进行更动态的用户交互,或者使用MVC掩码插件,或者只正确使用显示格式字符串。

如果你是MVC编程的新手,把这段代码放在你的视图文件(.cs.html)的最后,看看神奇之处:

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

这种格式目前用于巴西的移动电话。适应您的标准。

这将在字段中添加括号和空格,从而增加输入数据的字符串长度。如果你只想保存数字,你必须在保存之前从字符串中去掉非数字。