2015-09-26 75 views
3

嗨,所以即時嘗試驗證我的字符串,以便它不允許任何以「911」開頭的輸入,所以如果您鍵入:「9 11」,「91 1」,「9 1 1 「它應該通過我的if語句。它與「911」,而不是其他人,這是我的代碼:在C中驗證字符串#

using System; 
using System.Collections.Generic; 

namespace Phone_List 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var phoneList = new List<string>(); 
      string input; 
      Console.WriteLine("Input: "); 

      while ((input = Console.ReadLine()) != "") 
      { 
       phoneList.Add(input); 

       for (int i = 0; i < phoneList.Count; i++) 
       { 
        if (phoneList[i].Substring(0, 3) == "911") 
        { 
         input.StartsWith("9 11"); 
         input.StartsWith("9 1 1"); 
         input.StartsWith("91 1"); 
         Console.WriteLine("NO"); 
         Console.ReadLine(); 
         return; 
        } 

        else 
        { 
         Console.WriteLine("YES"); 
         Console.ReadLine(); 
         return; 
        } 
       } 
      } 
     } 
    } 
} 

正如你可以看到,我試圖用「input.StartsWith("9 11")」;但它不工作...

+0

這些代碼並沒有真正太大的意義,你正在寫的條件塊內的'StartsWith'檢查時,它已經與「911」,並沒有別的開始。此外,您必須檢查'StartsWith'是否返回'true',現在,您的支票什麼也不做。 –

+1

谷歌「正則表達式」。它們是爲了用這樣的規則驗證字符串而設計的結構。 – t3dodson

+0

使用正則表達式。這裏以911開始的所有字符串的正則表達式應該是「911. *」。當出現匹配時,您知道當前輸入始於911 –

回答

1

使用正則表達式進行此類檢查。

例如:

Regex.IsMatch(input, "^\\s*9\\s*1\\s*1"); 

此正則表達式匹配的所有字符串,包括以和「911」之間的空格前面。

+0

我通過編寫這段代碼得到一個:「無法識別轉義序列」。 – Cleon

+0

@Cleon對不起,忘了逃避反斜槓。通常,轉義序列的寫法與'\ s'類似,但'\'是字符串中的特殊字符,因此您必須將其轉義。這導致'\\ s'。更新後的答案現在是正確的 – Domysee

0

使用以下方法來檢查字符串"911"開始:

首先創建一個從輸入字符串的副本,但沒有任何空格:

string input_without_white_spaces = 
    new string(input.ToCharArray().Where(x => !char.IsWhiteSpace(x)).ToArray()); 

然後您可以檢查字符串是否以911開頭,如下所示:

if (input_without_white_spaces.StartsWith("911")) 
{ 
    ... 
} 
2

您可以使用Replace方法String;您描述的情況可以如下表述。

input.Replace(" ", "").StartsWith("911") 
+0

所以我試圖在我的if語句之前編寫這段代碼,它仍然不起作用,我是否錯過了某些東西? – Cleon

0
bool valid = s.StartsWith("911") || 
      !string.Join("",s.Split()).StartsWith("911");