簡體   English   中英

檢查字符串是否僅包含字母,數字和下划線

[英]Check if a string contains only letters, digits and underscores

我必須檢查一個字符串是否只包含字母,數字和下划線。 這是我嘗試的方式,但它不起作用:

for(int i = 0; i<=snameA.Length-1; i++)
{
    validA = validA && (char.IsLetterOrDigit(snameA[i])||snameA[i].Equals("_"));
}

您每次都要分配validA ,而不檢查其先前的值。 現在,您始終可以獲得上次執行檢查的值。

你可以'和'結果:

validA &= (char.IsLetterOrDigit(snameA[i]) || snameA[i] == '_');

這意味着您仍然可以運行所有字符,如果第一次檢查失敗,這可能毫無用處。 如果它失敗,最好簡單地走出去:

for(int i = 0; i<=snameA.Length-1; i++)
{
    validA = (char.IsLetterOrDigit(snameA[i]) || snameA[i] == '_');

    if (!validA)
    { break; } // <-- see here
}

或者使用LINQ:

validA = snameA.All(c => char.IsLetterOrDigit(c) || c == '_');

我喜歡Linq這樣的問題:

bool validA = sname.All(c => Char.IsLetterOrDigit(c) || c.Equals('_'));

你可以使用正則表達式

Regex regex1 = new Regex(@"^[a-zA-Z0-9_]+$");

if(regex1.IsMatch(snameA))
{

}

您可以嘗試匹配正則表達式。 “字母,數字和下划線”有內置類型,即“\\ w”。

Regex rgx = new Regex(@"\w*");
rgs.IsMatch(yourString);

如果您需要1或更多,請使用“\\ w +”。

更多信息: Regex.IsMatch

我會使用正則表達式

string pattern = @"^[a-zA-Z0-9\_]+$";
Regex regex = new Regex(pattern);

// Compare a string against the regular expression
return regex.IsMatch(stringToTest);

首先, 字母是一個模糊的術語:你的意思是a..zA..Z字符或字母可以屬於任何字母表 ,例如а..яА..Я (俄語,西里爾字母)。 根據您當前的實現 ,您需要第二個選項

循環的典型解決方案是檢查直到第一個計數器示例:

  Boolean validA = true; // true - no counter examples so far

  // Why for? foreach is much readble here
  foreach(Char ch in sname) 
    // "!= '_'" is more readable than "Equals"; and wants no boxing
    if (!char.IsLetterOrDigit(ch) && ! (ch != '_')) { 
      Boolean validA = false; // counter example (i.e. non-letter/digit symbol found)

      break; // <- do not forget this: there's no use to check other characters
    }

但是,您可以使用Linq簡化代碼:

  validA = sname.All(ch => Char.IsLetterOrDigit(ch) || ch == '_');

正則表達式

  validA = Regex.IsMatch(sname, @"^\w*$");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM