[電話]属性のデフォルトの有効な形式は何ですか?データテーブルでは、電話の列はnavrchar(16)です。1112223333のような電話番号を入力すると、「フィールドは有効な電話番号ではありません」と表示されます。 01112223333と入力すると、「値 '11112223333'は無効です。」と表示されます。
また、それをオーバーライドする方法は?私はこのようなことができることを理解していますが、これはこの場合のベストプラクティスですか?
[RegularExpression(@"((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}",ErrorMessage="Invalid Phone Number!")]
関連コード:
[Required]
[Phone]
public string Phone { get; set; }
<div class="editor-field">
@Html.EditorFor(model => model.Phone)
@Html.ValidationMessageFor(model => model.Phone)
</div>
更新電話の列をintからnavrcharに変更したときにマッピングの問題があったと思います。モデルを更新するだけでは不十分だったため、テーブルマッピングを使用して手動で値を変更する必要がありました。
エラー2019:指定されたメンバーマッピングは無効です。タイプ「UserDBModel.UserProfile」のメンバー「Phone」のタイプ「Edm.Int32 [Nullable = False、DefaultValue =]」は、「SqlServerCe.nvarchar [Nullable = False、DefaultValue =、MaxLength = 16、Unicode = True」と互換性がありません、FixedLength = False] 'タイプ' UserDBModel.Store.UserProfile 'のメンバー' Phone 'の。
PhoneAttribute
のデフォルトの正規表現は、 。NET Reference Source( 。NET Framework 2.7.2) または source.dot.net (。NET Core)
そこでは(醜い)正規表現が次のように定義されていることが示されています:
private static Regex _regex = new Regex(@"^(\+\s?)?((?<!\+.*)\(\+?\d+([\s\-\.]?\d+)?\)|\d+)([\s\-\.]?(\(\d+([\s\-\.]?\d+)?\)|\d+))*(\s?(x|ext\.?)\s?\d+)?$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);
それはあなたの直接の質問に答えますが、それが役立つかどうかはまだわからないままです。多分それはあなた自身の修正された電話番号正規表現を作成するための良いベースになるでしょう。
これを試して -
[Required(ErrorMessage = "Mobile no. is required")]
[RegularExpression("^(?!0+$)(\\+\\d{1,3}[- ]?)?(?!0+$)\\d{10,15}$", ErrorMessage = "Please enter valid phone no.")]
public string Phone { get; set; }