Ответ 1
Вы можете использовать методы char
с помощью LINQ
:
if (myString.Any(char.IsUpper) &&
myString.Any(char.IsLower) &&
myString.Any(char.IsDigit))
Я хочу проверить, есть ли в моей строке "Верхний регистр", "Нижний регистр" и "Номер"
string myString = "Hello123";
if (myString haveUppercase && myString haveLowerCase && myString haveNumber)
{
this.hide();
}
else
{
MessageBox.Show("Error!");
}
Вы можете использовать методы char
с помощью LINQ
:
if (myString.Any(char.IsUpper) &&
myString.Any(char.IsLower) &&
myString.Any(char.IsDigit))
if (myString.Any(ch => char.IsUpper(ch) &&
myString.Any(ch => char.IsLower(ch) &&
myString.Any(ch => char.IsDigit(ch))
{
this.hide();
}
else
{
MessageBox.Show("Error!");
}
Как насчет?
if(myString.Any(char.IsLower) && myString.Any(char.IsUpper) && myString.Any(char.IsDigit))
Для достижения цели, классический способ, отличный от LINQ, для этого:
public static bool HasUpperLowerDigit(string text)
{
bool hasUpper = false; bool hasLower = false; bool hasDigit = false;
for (int i = 0; i < text.Length && !(hasUpper && hasLower && hasDigit); i++)
{
char c = text[i];
if (!hasUpper) hasUpper = char.IsUpper(c);
if (!hasLower) hasLower = char.IsLower(c);
if (!hasDigit) hasDigit = char.IsDigit(c);
}
return hasUpper && hasLower && hasDigit;
}
Это более эффективно, потому что он каждый цикл обрабатывает только один раз, тогда как подходы LINQ нуждаются в трех перечислениях.
Мы можем использовать метод расширения для буквенно-цифровых символов, например, ниже
(Также мы можем использовать другой метод расширения для Small Letters, Capital Буквы и числа отдельно, если нам нужно)
static class StringExtension
{
public static bool IsAlphaNumeric(this string strToCheck)
{
Regex rg = new Regex(@"^[a-zA-Z0-9\s,]*$");
return rg.IsMatch(strToCheck);
}
}
Мы можем использовать вышеупомянутый метод расширения, как показано ниже:
{
string strValue = "vasanth";
strValue.IsAlphaNumeric(); //return true
string strValue1 = "vasanth!";
strValue.IsAlphaNumeric(); //return false
}