输入的手机号码的值显示“非有效号码”,尽管输入10位数的正则表达式

问题描述 投票:2回答:2

我试图对用户输入的手机号码进行验证,尽管为10位手机号码设置正则表达式。

这是Model类

 public partial class student1
    {
        public int StudentId { get; set; }
        [Required]
        [StringLength(30)]
        public string Name { get; set; }
        public string Branch { get; set; }
        [Display(Name = "Mobile Number:")]
       [Required(ErrorMessage = "Mobile Number is required.")]

        [RegularExpression("^([07][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] | 8[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] | 9[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])", ErrorMessage = "Invalid Mobile Number.")]
        public Nullable<int> Mobile { get; set; }
    }

Create观点

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

当我运行它时,对于输入少于10的手机号码,它会显示我写的错误消息。但是对于10或更高的价值,我得到了一条新消息

值“999999999”对于手机号码无效:

我不知道这条消息来自哪里。另外,为什么它不接受10位数值?

regex asp.net-mvc
2个回答
2
投票

对于64位机器,c#中的int的最大值是

2,147,483,647

它小于9999999999所以它是int的溢出,所以它是模型绑定之前从Controller进行模型验证的错误消息。

int转换为long

public Nullable<long> Mobile { get; set; }

同时检查正则表达式,它也可能会遗漏一些有效数字。

c#source的int最大值:

https://msdn.microsoft.com/en-us/library/system.int32.maxvalue(v=vs.110).aspx

What is the int.MaxValue on a 64-bit PC?


1
投票

尝试正则表达式= ^(\ d {1,3} [ - ]?)?\ d {10} $

© www.soinside.com 2019 - 2024. All rights reserved.