web-dev-qa-db-ja.com

電話番号検証MVC

無効な番号または電話番号が送信されたときに正規表現を使用して電話番号を検証し、エラーを返そうとしています。

MVCコード

<ol class="row">
    <li class="cell" style="width: 20%;">Phone Number:</li>
    <li class="cell last" style="width: 60%;">
        @Html.TextBoxFor(model => model.PhoneNumber, new { @class = "textbox" }) 
        @Html.ValidationMessageFor(model => model.PhoneNumber)
    </li>
</ol>

C#コード

[DataType(DataType.PhoneNumber)]
[Display(Name = "Phone Number")]
[Required(ErrorMessage = "Phone Number Required!")]
[RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$",
                   ErrorMessage = "Entered phone format is not valid.")]
public string PhoneNumber { get; set; }

ただし、入力ボックスには、送信された電話番号が無効であることを示すメッセージがユーザーに表示されません。

28

モデル

[Required(ErrorMessage = "You must provide a phone number")]
[Display(Name = "Home Phone")]
[DataType(DataType.PhoneNumber)]
[RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Not a valid phone number")]
public string PhoneNumber { get; set; }

表示:

@Html.LabelFor(model => model.PhoneNumber)
@Html.EditorFor(model => model.PhoneNumber)
@Html.ValidationMessageFor(model => model.PhoneNumber)
66
meda

モバイル用の簡単な正規表現を試してください

[Required (ErrorMessage="Required")]
[RegularExpression(@"^(\d{10})$", ErrorMessage = "Wrong mobile")]
public string Mobile { get; set; }
6
Slan

ページにバリデーターがありません。検証メッセージを表示するには、このようなものを追加します。

@Html.ValidationMessageFor(model => model.PhoneNumber, "", new { @class = "text-danger" })
5
DLeh

(###)###-####形式で電話番号を表示するには、新しいHtmlHelperを作成できます。

使用法

@Html.DisplayForPhone(item.Phone)

HtmlHelper拡張機能

public static class HtmlHelperExtensions
{
    public static HtmlString DisplayForPhone(this HtmlHelper helper, string phone)
    {
        if (phone == null)
        {
            return new HtmlString(string.Empty);
        }
        string formatted = phone;
        if (phone.Length == 10)
        {
            formatted = $"({phone.Substring(0,3)}) {phone.Substring(3,3)}-{phone.Substring(6,4)}";
        }
        else if (phone.Length == 7)
        {
            formatted = $"{phone.Substring(0,3)}-{phone.Substring(3,4)}";
        }
        string s = $"<a href='tel:{phone}'>{formatted}</a>";
        return new HtmlString(s);
    }
}
4
Jess

上記の回答とともに、最小および最大長でこれを試してください:

モデルで

[StringLength(13, MinimumLength=10)]
public string MobileNo { get; set; }

ビューで

 <div class="col-md-8">
           @Html.TextBoxFor(m => m.MobileNo, new { @class = "form-control" , type="phone"})
           @Html.ValidationMessageFor(m => m.MobileNo,"Invalid Number")
           @Html.CheckBoxFor(m => m.IsAgreeTerms, new {@checked="checked",style="display:none" })
  </div>
3
Darshan

[DataType(DataType.PhoneNumber)]には、すぐに使用できる検証ロジックはありません。

docs によると:

DataTypeAttribute属性をデータフィールドに適用する場合、以下を実行する必要があります。

  • 必要に応じて検証エラーを発行します。

[Phone]属性は[DataType]を継承し、.NET Framework 4.5+で導入され、検証ロジックの独自のフレーバーを提供する.NET Coreにあります。したがって、次のように使用できます。

[Phone()]
public string PhoneNumber { get; set; }

ただし、電話番号の既定の検証は かなり許容できる であるため、DataTypeから継承して独自のIsValidメソッドを実装する必要がある場合があります。または、ここで他の人が示唆しているように、 正規表現RegexValidatorを使用して入力を制限します。

:.NETが作成した ベストプラクティス に従って、制約のない入力に対してRegexで注意してください 電話番号の独自の内部検証ロジックで正規表現から離れる

1
KyleMit

または、JQueryを使用することもできます-入力フィールドをクラス「phone」に追加して、これをスクリプトセクションに追加するだけです。

$(".phone").keyup(function () {
        $(this).val($(this).val().replace(/^(\d{3})(\d{3})(\d)+$/, "($1)$2-$3"));

エラーメッセージはありませんが、10桁すべてを入力するまで電話番号が正しくフォーマットされていないことがわかります。

1
Thomas Fonseca

これを試して:

[DataType(DataType.PhoneNumber, ErrorMessage = "Provided phone number not valid")]
1
Slan