限制电话号码的长度

时间:2016-06-24 15:53:47

标签: c# regex razor

我希望电话号码的字段最多可包含10位数字。我放置了[stringlength]属性,但仍然无法获得所需的结果。感谢那些可以帮助我的人。

另一方面,是否有可能拆分电话号码,以便区号和剩余数字通过存储过程分别发送到数据库?

模型:

 public class Pharmacy
{
  [StringLength(10,MinimumLength=10)]
    public string PhoneNumber
    {
        get
        {
            return _phoneNumber;
        }
        set
        {
            Regex regexObj = new Regex(@"[^\d]");
            _phoneNumber = regexObj.Replace(value, "");
            _phoneNumber = Regex.Replace(_phoneNumber, @"(\d{3})(\d{3})(\d{4})", "($1) $2-$3");
        }
    }
}

表单字段:

 <label id="lblPhoneNumber">Phone Number</label>                       
 <input style="margin: 5px; " type=text name="txtPhoneNumber" id="txtPhoneNumber" value="@Model.Pharmacy.PhoneNumber" />  

1 个答案:

答案 0 :(得分:1)

如果您正在使用ASP.NET MVC,为什么要使用HTML标记作为输入?你应该使用Razor标签。

@Html.LabelFor(model => model.PhoneNumber, new { id = "lblPhoneNumber" })
@Html.TextBoxFor(model => model.PhoneNumber, new { id = "txtPhoneNumber", style="margin: 5px;", name="txtPhoneNumber", @Value = Model.Pharmacy.PhoneNumber })
@Html.ValidationFor(model => model.PhoneNumber, "", new { @class = "text-danger" })

另外,请确保您具有不显眼的J NuGet UnobtrusiveJS进行验证。使用数据注释,其他一切似乎都很好。 [StringLength]的未命名参数是最大长度,而您需要指定最小长度。您可能还想让用户知道错误,因此您也需要一条错误消息[StringLength(10, MinimumLength=10, ErrorMessage="* Must be 10 digits")]

问题的第二部分

  

另一方面,是否有可能拆分电话号码,以便区号和剩余数字通过存储过程分别发送到数据库?

是的,使用你已经在做的RegEx捕获组:)。

RegEx regEx = new Regex(@"(\d{3})(\d{3})(\d{4})")
Matches matches = regex.Matches(value);
// matches[0] contains area code
// matches[1] contains first 3 digits
// matches[2] contains final 4 digits

MSDN - Regex.Matches