2016-09-22 4 views
0

私の目的は、ユーザーが有効な電話番号を一度入力したかどうかを確認することです。そうでなければ、私は彼らに間違っていると言います。私はHow to format a string as a telephone number in C#といくつかの他のを見てきましたが、私はまだよく分かりません。C#の電話番号を確認するには?

私がする必要があることは、ユーザーが有効な数字を意味することを意味します。1)数字だけでもかまいません。2)ダッシュは適切な場所にある必要があります。

私は3番目をやった。私は主に2番を考え出すのですが同じような何かをやっに関する正しい上記の質問で、数1がちょうどTryParse検証する必要があります..:

string phone = i["MyPhone"].ToString(); 
string area = phone.Substring(0, 3); 
string major = phone.Substring(3, 3); 
string minor = phone.Substring(6); 
string formatted = string.Format("{0}-{1}-{2}", area, major, minor); 

、これは.Formatを示しています。数字が正しく書式設定されているかどうかを確認するだけで、数字を実際にダッシュの間に置かないようにするため、私はそれが必要だとは思わない。

ので、最終的な結果は、番号を入力してください 次のようになります。この数123-45-45-4 :この番号が有効な

または

です123-456-7890 おめでとうと数字を入力してください有効じゃない。

Regexソリューションを使用しないでください。数字は実際のものである必要はありません。ちょうどそれが上記のフォーマットに合っている限り。

+2

ルック – Oliver

+0

うーん、プログラマーとして、簡単にソフトウェアを使用して、人々の生活をするために私たちの仕事で、入力するように使用を強制しませんまったく別の方法はありませんあなたは確信している「 - 」のためには、電話番号?あなたの電話番号を書き留めたり、頼んだときに誰かに送信する方法は?私は、ユーザーに電話番号で " - "を使用させる代わりに、より良いデザインを思いつくことができると思います。 – Arjang

+1

国際番号も考慮してください(米国の場合は+155512345678など)。適切な場所でダッシュをチェックするのと同じくらい簡単ではありません。おそらく最小桁数を確認して、自分のフォーマットを入力させてください。 – DavidG

答えて

1
bool wrong = true; 

     while (wrong) 
     { 
      string phoneNumber = Console.ReadLine(); 
      string[] values = phoneNumber.Split('-'); 
      while (string.IsNullOrWhiteSpace(phoneNumber)) 
      { 
       Console.WriteLine("Invalid - Please do not leave blank"); 
      } 

      if (values.Length == 3 && values[0].Length == 3 && values[1].Length == 3 && values[2].Length == 4) 
      { 
       int yesnumber; 
       List<int> intvalues = new List<int>(); 
       for (int number = 0; number < values.Length; number++) 
       { 
        bool isNumeric = Int32.TryParse(values[number], out yesnumber); 
        if (isNumeric == true) 
        { intvalues.Add(yesnumber); } 
       } 
       if(intvalues.Count == 3) 
       { 
        Console.WriteLine("Congratulations This is a valid number"); 
        break; 
       } 

       else { Console.WriteLine("This is not a valid number"); } 
      } 

      else { Console.WriteLine("This is not a valid number"); } 
     } 
     Console.ReadLine(); 
    } 

これは単純なコンソールアプリケーション向けですが、ユーザーが要求したすべてのものを特定の形式で使用する必要がある場合に適しています。

編集*番号を確認しないためにエラーを修正しました。

+0

パーツが整数として解析されるかどうかをテストしましたが、そのテストの結果は無視したので、うれしく「ABC-DEF-GHIJ」を受け取ります。 –

+0

あなたの答えを編集して、そのコードがどのように機能するのかを説明してください。 – dorukayhan

+0

私が求めていたものではありませんが、動作します!ありがとう! – Xoax

1

正規表現エンジンを使用していない場合でも、パターンを使用するのに役立ちます。 「それはパターンと非数字と同じ場所で数字を持っている場合はまったく同じです」たとえば、番号が有効である。このようにコード化することができます。

bool IsPhoneNumber(string input, string pattern) 
{ 
    if (input.Length != pattern.Length) return false; 

    for(int i = 0; i < input.Length; ++i) { 
     bool ith_character_ok; 
     if (Char.IsDigit(pattern, i)) 
      ith_character_ok = Char.IsDigit(input, i); 
     else 
      ith_character_ok = (input[i] == pattern[i]); 

     if (!ith_character_ok) return false; 
    } 
    return true; 
} 

あなたも複数のパターンに対してチェックすることができ、例

if (IsPhoneNumber(input, "000-000-0000") || IsPhoneNumber(input, "(000) 000-0000")) 

でものために、それはまた、例えば、他のものを一致させるための社会保障番号の000-00-0000のパターンを使用することができます。正規表現に

0
List<string> phoneNumbers = new List<string> {"111-111-1111", 
              "1-111-111-1111", 
              "111111-1111", 
              "111-1111111", 
              "(111)111-1111", 
              "(111) 111-1111", 
              "11111111111", 
              "111111-11111", 
              "1111111111111"}; 

foreach(string phoneNumber in phoneNumbers) 
{ 
    Match match = Regex.Match(phoneNumber,@"^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-.)]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$", RegexOptions.IgnoreCase); 

    Console.WriteLine(phoneNumber + " " + match.Success); 
} 


//111-111-1111 True 
//1-111-111-1111 True 
//111111-1111 True 
//111-1111111 True 
//(111)111-1111 True 
//(111) 111-1111 True 
//11111111111 True 
//111111-11111 False 
//1111111111111 True 
関連する問題