2017-08-08 10 views
0

文字列(textBox1.Text)に2つのダッシュ(XXXXX-XXXXX-XXXXXなど)があることを確認しようとしています。私はRegexのようなまったく新しいものを学ぶことなくこれを行う最善の方法を考え出すのに苦労しました。文字列に2つのダッシュが含まれていることを確認するにはどうすればよいですか?

は、今私が持っている:1つのダッシュのための

else if (!textBox1.Text.Contains("-")) 
     { 
      label3.Text = "Incorrect"; 
     } 

しかし、これだけのチェックを。

基本的に、文字列textBox1.Textに正確に2つのダッシュが含まれているかどうかをif文で確認するにはどうすればよいですか?

答えて

0

あなたがして文字列内のダッシュの回数を確認することができます。

if str.Count(x => x == '-') != 2 { ... } 

これは基本的に「と言った項目はダッシュに等しいとき、文字列内の項目数(文字)を数える」という意味。これを2つにチェックすると、入力文字列の妥当性などを検出できます。


あなたは、正規表現を学ぶまでた場合、これは開始時に任意のと同じくらい良い場所です。あなたが好きなもので、特定のパターンを確認することができます:

using System; 
using System.Text.RegularExpressions; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string str = "XXXXX-XXXXX-XXXXX"; 
      Regex re = new Regex(@"^[^-]*-[^-]*-[^-]*$"); 
      Console.Out.WriteLine(re.Match(str).Success); 
     } 
    } 
} 

今では正規表現は複雑に見えるかもしれませんが、それは比較的簡単です:

^  Start anchor. 
[^-]* Zero or more of any non-dash characters. 
-  Dash character. 
[^-]* Zero or more of any non-dash characters. 
-  Dash character. 
[^-]* Zero or more of any non-dash characters. 
$  End anchor. 
+0

これは唯一、うまくいきました。ありがとうございました! – XantiuM

2

あなたは

if(dashCounter == 2) { } 
+1

ええと....あなたはよろしいですか?私は0を得ます... – john

+1

'string code = textBox1.Text; var dashCounter = code.TakeWhile(x => x == ' - ')。Count();' then 'else if(dashCounter == 2){。 ..} 'はうまくいかないようです。 – XantiuM

+0

カウント方法で十分です! –

2

その後、Count方法

string input = "XXXXX-XXXXX-XXXXX"; 

var dashCounter = input.Count(x => x == '-'); 

を使用することができます正規表現は、それが学習の価値が、本当にすべてが複雑ではありません。

ここでは、LINQを使用した簡単な解決方法を示します。別のは、ここで提案したようTakeWhileを使用して

int dashCount = textbox1.Text.Count(t=>t =='-'); 

だけで、あなたに大手ダッシュが表示されます。たとえば、2を取得するには、--XX-XXのような文字列が必要です(先頭のダッシュはカウントされません)。

関連する問題