我有一个输入字符串,我想验证它包含:
仅限信件或 只有字母和数字或者 只能使用字母、数字或下划线
为了澄清,我在代码中有3种不同的情况,每种情况调用不同的验证。用c#实现这个最简单的方法是什么?
我有一个输入字符串,我想验证它包含:
仅限信件或 只有字母和数字或者 只能使用字母、数字或下划线
为了澄清,我在代码中有3种不同的情况,每种情况调用不同的验证。用c#实现这个最简单的方法是什么?
当前回答
我认为这是一个使用正则表达式的好情况:
public bool IsAlpha(string input)
{
return Regex.IsMatch(input, "^[a-zA-Z]+$");
}
public bool IsAlphaNumeric(string input)
{
return Regex.IsMatch(input, "^[a-zA-Z0-9]+$");
}
public bool IsAlphaNumericWithUnderscore(string input)
{
return Regex.IsMatch(input, "^[a-zA-Z0-9_]+$");
}
其他回答
我还没有看到使用模式匹配的解决方案:
public static bool ContainsOnlyLetters(this string input)
{
bool isValid = true;
for (int i = 0; isValid && i < input.Length; i++)
{
isValid &= input[i] is >= 'A' and <= 'Z' or >= 'a' and <= 'z';
}
return isValid;
}
或者如果你真的非常讨厌可读的代码:
public static bool ContainsOnlyLetters(this string input)
{
bool isValid = true;
for (int i = 0; i < input.Length && (isValid &= input[i] is >= 'A' and <= 'Z' or >= 'a' and <= 'z'); i++);
return isValid;
}
迭代通过字符串字符和使用'Char'函数称为'IsLetter'和'IsDigit'。
如果你需要更具体的东西-使用Regex类。
只有字母:
Regex.IsMatch(input, @"^[a-zA-Z]+$");
仅限字母和数字:
Regex.IsMatch(input, @"^[a-zA-Z0-9]+$");
只有字母、数字和下划线:
Regex.IsMatch(input, @"^[a-zA-Z0-9_]+$");
请找到验证字符是字母、数字还是空格的方法,否则附加下划线 (可根据需要随意修改)
public String CleanStringToLettersNumbers(String data)
{
var result = String.Empty;
foreach (var item in data)
{
var c = '_';
if ((int)item >= 97 && (int)item <= 122 ||
(int)item >= 65 && (int)item <= 90 ||
(int)item >= 48 && (int)item <= 57 ||
(int)item == 32)
{
c = item;
}
result = result + c;
}
return result;
}
我认为这是一个使用正则表达式的好情况:
public bool IsAlpha(string input)
{
return Regex.IsMatch(input, "^[a-zA-Z]+$");
}
public bool IsAlphaNumeric(string input)
{
return Regex.IsMatch(input, "^[a-zA-Z0-9]+$");
}
public bool IsAlphaNumericWithUnderscore(string input)
{
return Regex.IsMatch(input, "^[a-zA-Z0-9_]+$");
}