2011-05-31 100 views
14

我用下面的代碼,但它返回false雖然它應該返回true檢查字母數字字符在C#

string check,zipcode; 
zipcode="10001 New York, NY"; 
check=isalphanumeric(zipcode) 

public static Boolean isAlphaNumeric(string strToCheck) 
{ 
    Regex rg = new Regex("[^a-zA-Z0-9]"); 

    //if has non AlpahNumeric char, return false, else return true. 
    return rg.IsMatch(strToCheck) == true ? false : true; 
} 
+1

,你需要放鬆它,所以它允許使用空格和逗號。 – Marko 2011-05-31 05:33:40

+0

有「」字符在上你的樣本串 – Stecya 2011-05-31 05:34:15

+0

http://stackoverflow.com/q/336210/82449可能的幫助。 – 2011-05-31 05:34:17

回答

44

試試這個:

public static Boolean isAlphaNumeric(string strToCheck) 
{ 
    Regex rg = new Regex(@"^[a-zA-Z0-9\s,]*$"); 
    return rg.IsMatch(strToCheck); 
} 

它更undestandable,如果在正則表達式,你的字符串應包含指定,而不是它不能。

在上面的例子:

  • ^- 表示字符串的開始
  • [] * - 可以包含括號
  • 一個-ZA-Z0-9之間的任何數量的字符 - 任何字母數字字符
  • \ S - 任何空格字符(空格/標籤/等)
  • , - 逗號
  • $ - 結束的字符串的
+0

這是此頁面上唯一正確的答案。請注意,這個正則表達式也允許一個完全空的字符串。所以我會用+代替*。逗號不是字母數字,因此該函數的名稱具有誤導性。如果你想有一個較短的版本,你可以寫:@ 「^ [\ W \ S,] + $」 – Elmue 2015-12-03 13:32:03

5

10001 New York, NY包含逗號和空格 - 非字母數字字符

您需要調整你的表情以允許逗號和空格。

此外,您可能需要重新命名該函數,以便其他開發人員很清楚它比isAlphaNumeric()函數更像驗證器。

1

當^在[]中時,它表示除這些字符以外的所有內容。

23
public static bool IsAlphaNumeric(string strToCheck) 
    { 
     return strToCheck.All(char.IsLetterOrDigit); 
    } 
+1

-1。不允許空格或逗號 – 2013-10-05 18:58:12

+10

逗號不是字母數字字符! – Elmue 2015-12-03 12:58:20

+0

@Elmue我仍然覺得這個答案更一般和更有用。我不是在尋找一種解決方案,它給了我一些字母,數字和一些一次性的標點符號。我搜索了一個字母和數字的解決方案,這個答案最適合我。 – 2017-02-05 22:14:31

0
tring check,zipcode; 
zipcode="10001 New York, NY"; 
check=isalphanumeric(zipcode) 

    public static Boolean isAlphaNumeric(string strToCheck) 
      { 
       Regex rg = new Regex("[^a-zA-Z0-9]"); 

       //if has non AlpahNumeric char, return false, else return true. 
       return rg.IsMatch(strToCheck) == true ? false : true; 
      } 

這個代碼回報總是假的,因爲symbole ^意味着是這個字符串不包含任何字母數字caractere,您需要刪除該^

+0

你的回答是錯誤的。 ^不是唯一的錯誤。即使刪除它,它仍然是錯誤的。這個正則表達式有多個錯誤。你以爲這樣的答案會贏得聲望嗎? – Elmue 2015-12-03 13:03:55

0

早在我的Perl天,我會用這個正則表達式:

\ w +

,這意味着一個或多個單詞字符。單詞字符基本上是a-zA-Z0-9,基本上不關心標點或空格。所以,如果你只是想確保存在的字符串值中成才,這是我在C#中使用了:

public static Boolean isAlphaNumeric(string strToCheck) 
{ 
    Regex rg = new Regex(@"\w+"); 
    return rg.IsMatch(strToCheck); 
} 

感謝Chopikadze的基本結構。

我確實認爲這樣會更快,因爲不是檢查整個字符串,而是停止在單詞字符的第一個實例並返回true。

+0

這個答案也是錯誤的。你的正則表達式不允許空格,它只搜索給定字符串中的任何字。它不檢查整個字符串是字母數字。所以你的答案有多個錯誤! – Elmue 2015-12-03 13:09:24

0

我需要一種方法,看看是否字符串包含任何字母數字,不使用正則表達式...

公共靜態布爾ContainsAlphaNumeric(字符串strToCheck) { 的foreach(在strToCheck焦三) { 如果(焦。IsLetterOrDigit(C)) { 返回真; }} 返回 假; }