2017-09-27 8 views
-1

CountryCodeAreaCodePhoneNumberのような電話番号フィールドを持つ顧客フォームがあります。私はこれらの3つのフィールドのカスタム検証を書いて、それらのすべてが空のままか(オプションであるか)、それらのすべてが満たされたままにできるか(1つまたは2つが満たされていればフィールドを空にすることはできません) このような状況のためのカスタム検証を作成しようとしていますが、それを行う方法が明確ではありません。助けてください。MVCを使用して複数のフィールドのカスタム検証を書き込む

+1

の構成部品を取得しますか? – Niladri

+0

[jquery validate:テキストボックスのグループの全部または一部に値があることを検証する方法](https://stackoverflow.com/questions/28139282/jquery-validate-how-to-validate-that-all-or- v4)と** this [fiddle](http://jsfiddle.net/t9y2x3jf/) – adiga

+1

[ASP.NET MVC 3での検証の完全なガイド - パート2](https://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2) –

答えて

0

あなたが探しているものが正確に不明です。ブール論理に苦労しているのであれば、必要なものは次のとおりです。

if (!String.IsNullOrWhiteSpace(model.CountryCode) || 
    !String.IsNullOrWhiteSpace(model.AreaCode) || 
    !String.IsNullOrWhiteSpace(model.PhoneNumber)) 
{ 
    if (String.IsNullOrWhiteSpace(model.CountryCode) 
    { 
     ModelState.AddModelError(nameof(model.CountryCode), "Country code is required."); 
    } 

    if (String.IsNullOrWhiteSpace(model.AreaCode) 
    { 
     ModelState.AddModelError(nameof(model.AreaCode), "Area code is required."); 
    } 

    if (String.IsNullOrWhiteSpace(model.PhoneNumber) 
    { 
     ModelState.AddModelError(nameof(model.PhoneNumber), "Phone number is required."); 
    } 
} 

まず、値があるかどうかを確認するだけです。次に、値を持たないそれぞれのエラーを個別に追加します。

つまり、これらの電話番号のフィールドは細かいところです。私はそのアイデアがどこから来たのかは分かりませんが、今は人々をすぐに奪うことができないようなものです。電話番号の形式はと大きく変わってで、実際にはすべての電話番号に「市外局番」があるわけではありません。 farの場合、ユーザーが電話番号全体を入力するだけの単一の「電話」フィールドを持つ方がよい。次に、port of Google's libphonenumber libraryのようなものを使用して番号を検証し、標準形式にフォーマットすることができます。このように保存する必要がある場合は、ライブラリを使用して、国別コード、市外局番、および番号の各部分を解析することもできます。市外局番が価値を持たない場合もありますが、正確に3桁ではない可能性があります。同じことが、番号部分のために行く:「US」:あなたは、それは常にcountryISO2は、2文字の国コードである7

検証電話番号

var phoneUtil = PhoneNumberUtil.GetInstance(); 
try { 
    var phoneNumber = phoneUtil.Parse(model.Phone, countryISO2); 
    if (!phoneUtil.IsValidNumber(phoneNumber)) 
    { 
     ModelState.AddModelError(nameof(model.Phone), "Invalid phone number."); 
    } 
} catch (NumberParseException) { 
    ModelState.AddModelError(nameof(model.Phone), "Invalid phone number."); 
} 

になりますと仮定することはできません、 "GB"など。国際電話番号を受け入れる場合は、ユーザーから国を収集する必要があります。可能であれば

フォーマットの電話番号

phoneUtil.Format(phoneNumber, PhoneNumberFormat.NATIONAL); 

は、任意のコードの電話番号

var countryCode = phoneNumber.CountryCode; 
string areaCode; 
string number; 

var nationalSignificantNumber = phoneUtil.GetNationalSignificantNumber(phoneNumber); 
var areaCodeLength = phoneUtil.GetLengthOfGeographicalAreaCode(phoneNumber); 
if (areaCodeLength > 0) { 
    areaCode = nationalSignificantNumber.Substring(0, areaCodeLength); 
    number = nationalSignificantNumber.Substring(areaCodeLength); 
} else { 
    areaCode = ""; 
    number = nationalSignificantNumber; 
} 
+0

ありがとうございます。これは参考になります。 – JavvyM

関連する問題