20

[Phone] 属性のデフォルトの有効な形式は何ですか? データ テーブルの phone 列は 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>

更新 phone 列を int から navrchar に変更したときにマッピングの問題があったと思います。モデルを更新するだけでは不十分だったので、テーブル マッピングを使用して手動で値を変更する必要がありました。

エラー 2019: 指定されたメンバー マッピングが無効です。タイプ 'UserDBModel.UserProfile' のメンバー 'Phone' のタイプ 'Edm.Int32[Nullable=False,DefaultValue=]' は 'SqlServerCe.nvarchar[Nullable=False,DefaultValue=,MaxLength=16,Unicode=True' と互換性がありませんタイプ「UserDBModel.Store.UserProfile」のメンバー「Phone」の ,FixedLength=False]」。

4

2 に答える 2

18

の既定の正規表現は、.NET 参照ソース( .NET Framework 2.7.2 )またはsource.dot.net ( .NET Core )PhoneAttributeでソース コードを参照することで簡単に見つけることができます。

そこには、(醜い)正規表現が次のように定義されていることが示されています。

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

それはあなたの直接の質問に答えますが、それが役立つかどうかはまだわかりません. 独自の変更された電話番号の正規表現を作成するための良いベースになるかもしれません。

サンプル正規表現一致

于 2014-03-01T08:15:39.847 に答える
11

これを試して -

  [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; }
于 2014-09-11T06:09:12.300 に答える