最近我一直在嘗試創建一種方法來確保字串具有某些型別的字符。然而,當我嘗試使用該方法時,它會停止檢查第 4 個字符上的字符是否是那樣的。
例如,我嘗試使用 4 個小寫字母,它告訴我這是錯誤的,但是當我嘗試在第 5 個字符上使用無效字符(小寫、符號)時,它說這是真的:
public bool CarLicensePlateCheck(string m)
{
if (m.Length >= 4 && m.Length <= 12)
{
foreach(char c in m)
{
if (char.IsDigit(c) == true || char.IsUpper(c)==true || char.IsWhiteSpace(c)==true || c.Equals("-"))
return true;
else
break;
}
return false;
}
else
return false;
}
uj5u.com熱心網友回復:
您可以嘗試正則運算式并讓 .Net 為您執行檢查:
using System.Text.RegularExpressions;
...
public static bool CarLicensePlateCheck(string m) =>
m != null && Regex.IsMatch(m, @"^[A-Z0-9\s\-]{4,12}$");
模式是
^ - start of the string
[A-Z0-9\s\-]{4,12} - from 4 to 12 characters which are either
in A..Z range - upper case letters
in 0..9 range - digits
\s - white space
\- - dash
$ - end of the string
uj5u.com熱心網友回復:
您需要檢查該字符是否無效并立即回傳 false,然后在 the 之外回傳 true foreach(因為此時您已經驗證了所有字符)。您所擁有的在第一個字符之后停止驗證,因為如果第一個字符有效,它只會回傳 true,如果不是,它會中斷foreach并回傳 false。
public bool CarLicensePlateCheck(string m)
{
if (m.Length >= 4 && m.Length <= 12)
{
foreach(char c in m)
{
// If it's not a valid character return false
if (!char.IsDigit(c)
&& !char.IsUpper(c)
&& !char.IsWhiteSpace(c)
&& c != '-')
return false;
}
// all characters have been validated so return true
return true;
}
else
return false;
}
uj5u.com熱心網友回復:
由于現在撰寫代碼,它只檢查第一個字符。如果此字符有效,則CarLicensePlateCheck回傳true。如果無效,則回圈中斷并CarLicensePlateCheck回傳false。
檢查字符是否無效并false立即回傳,如果是這樣。true當整個回圈通過時回傳。
uj5u.com熱心網友回復:
其他答案中提出的另一種選擇是使用 LINQ。這導致代碼非常短,我認為意圖非常明確。
using System.Linq;
...
public static bool IsValid(char c)
{
return char.IsDigit(c) || char.IsUpper(c) || char.IsWhiteSpace(c) || c == '-';
}
public static bool CarLicensePlateCheck(string m)
{
return m.Length >= 4 && m.Length <= 12 && m.All(c => IsValid(c));
}
此代碼使用 LINQ 的All方法,如果謂詞對序列的所有元素都回傳 true,則該方法回傳 true。我還添加了static修飾符來標記這些方法不依賴于包含類的任何成員變數或屬性。
由于每個函式本質上都是一個單獨的運算式,因此可以重寫為:
public static bool IsValid(char c) =>
char.IsDigit(c) || char.IsUpper(c) || char.IsWhiteSpace(c) || c == '-';
public static bool CarLicensePlateCheck(string m) =>
m.Length >= 4 && m.Length <= 12 && m.All(IsValid);
您更喜歡其中哪一種是品味問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/321995.html
下一篇:回傳具有多個值之一的行
