[英]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..z
和A..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.