我有一个输入字符串,我想验证它是否包含:
为了澄清,我在代码中有3个不同的案例,每个案例都要求进行不同的验证。在C#中实现这一目标的最简单方法是什么?
答案 0 :(得分:254)
只有信件:
Regex.IsMatch(input, @"^[a-zA-Z]+$");
只有字母和数字:
Regex.IsMatch(input, @"^[a-zA-Z0-9]+$");
只有字母,数字和下划线:
Regex.IsMatch(input, @"^[a-zA-Z0-9_]+$");
答案 1 :(得分:218)
bool result = input.All(Char.IsLetter);
bool result = input.All(Char.IsLetterOrDigit);
bool result = input.All(c=>Char.IsLetterOrDigit(c) || c=='_');
答案 2 :(得分:44)
仅限信件:
Regex.IsMatch(theString, @"^[\p{L}]+$");
字母和数字:
Regex.IsMatch(theString, @"^[\p{L}\p{N}]+$");
字母,数字和下划线:
Regex.IsMatch(theString, @"^[\w]+$");
请注意,这些模式也匹配国际字符(与使用a-z
构造相反)。
答案 3 :(得分:19)
对于那些不愿意使用Regex且使用.NET 2.0 Framework(AKA no LINQ)的人:
仅限信件:
public static bool IsAllLetters(string s)
{
foreach (char c in s)
{
if (!Char.IsLetter(c))
return false;
}
return true;
}
仅限数字:
public static bool IsAllDigits(string s)
{
foreach (char c in s)
{
if (!Char.IsDigit(c))
return false;
}
return true;
}
仅限数字或字母:
public static bool IsAllLettersOrDigits(string s)
{
foreach (char c in s)
{
if (!Char.IsLetterOrDigit(c))
return false;
}
return true;
}
仅限数字或字母或下划线:
public static bool IsAllLettersOrDigitsOrUnderscores(string s)
{
foreach (char c in s)
{
if (!Char.IsLetterOrDigit(c) && c != '_')
return false;
}
return true;
}
答案 4 :(得分:8)
我认为使用正则表达式是一个很好的例子:
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_]+$");
}
答案 5 :(得分:4)
你可以循环字符串的字符并使用Char方法IsLetter进行检查 但你也可以使用String方法IndexOfAny来搜索其他不应该在字符串中的字符。
答案 6 :(得分:1)
迭代字符串字符并使用名为'IsLetter'和'IsDigit'的'Char'函数。
如果您需要更具体的内容 - 请使用Regex类。
答案 7 :(得分:1)
如果你是一个新手,那么你可以从我的代码中获取参考..我所做的就是检查,以便我只能获得字母和空格!您可以在第二个if语句之后重复for循环以再次验证字符串
bool check = false;
Console.WriteLine("Please Enter the Name");
name=Console.ReadLine();
for (int i = 0; i < name.Length; i++)
{
if (name[i]>='a' && name[i]<='z' || name[i]==' ')
{
check = true;
}
else
{
check = false;
}
}
if (check==false)
{
Console.WriteLine("Enter Valid Value");
name = Console.ReadLine();
}
答案 8 :(得分:0)
请找到验证char是字母,数字还是空格的方法,否则请在下划线处附加 (可以根据需要自由修改)
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;
}
答案 9 :(得分:-1)
最近,我在此页面的帮助下对检查字符串中的字母的函数的性能进行了改进。
我发现使用正则表达式的解决方案比使用Char.IsLetterOrDigit检查的解决方案慢30倍。
我们不确定这些字母或数字是否包含在内,我们只需要拉丁字符,因此可以根据Char.IsLetterOrDigit函数的反编译版本来实现我们的功能。
这是我们的解决方案:
internal static bool CheckAllowedChars(char uc)
{
switch (uc)
{
case '-':
case '.':
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
case 'K':
case 'L':
case 'M':
case 'N':
case 'O':
case 'P':
case 'Q':
case 'R':
case 'S':
case 'T':
case 'U':
case 'V':
case 'W':
case 'X':
case 'Y':
case 'Z':
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
return true;
default:
return false;
}
}
用法如下:
if( logicalId.All(c => CheckAllowedChars(c)))
{ // Do your stuff here.. }