提供されたデータが電話番号の形式であることを検証し、バリデーターの数字だけに切り詰めることは可能ですか?
入力: (902) 837-2832
出力:有効: はい、9028372832
それとも、事後に入力を数値のみの形式に変換する必要がありますか?
提供されたデータが電話番号の形式であることを検証し、バリデーターの数字だけに切り詰めることは可能ですか?
入力: (902) 837-2832
出力:有効: はい、9028372832
それとも、事後に入力を数値のみの形式に変換する必要がありますか?
正規表現で検証する方法の例を次に示します。
[Required(ErrorMessage="Phone Number is required")]
[RegularExpression("^(?([0-9]{3}))?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage="Not a valid number")]
public string PhoneNumber { get; set; }
文字列のTrimメソッドを使用して、電話番号をクリーンアップし、数字のみを取得する場合があります。
char[] charsToTrim = { '(', ' ', ')', '-'};
string phoneNumber = "(123)-345-6789";
string result = banner.Trim(charsToTrim);
入力にバインドされているプロパティの簡素化されたバージョンを返すゲッターのみを使用して、モデルにプロパティを追加します。そのプロパティに検証属性を配置します。
public string PhoneNumber {get;set;}
[Required(ErrorMessage="Phone number is required.")]
[RegularExpression(@"\d{10}", ErrorMessage="Phone number is invalid.")]
public string PhoneNumberValue
{
get
{
var temp = PhoneNumber
temp = Regex.Replace(temp, @"[^0-9]", "");
temp = temp.Length == 11 && temp.StartsWith("1")
? temp.Substring(1) : temp;
}
set
{
// I can't remember off the top of my head if MVC model
// binding requires a setter or not. If so, just leave this
// empty. Otherwise you can remove it entirely.
}
}
次に、ビューで代替検証メッセージをレンダリングします。
@Html.LabelFor(x=>x.PhoneNumber)
@Html.TextBoxFor(x=>x.PhoneNumber)
@Html.ValidationMessageFor(x=>x.PhoneNumberValue)