Verifying that a string contains only letters in C#
我有一个输入字符串,我想验证它是否包含:
- 只有字母或
- 只有字母和数字或
- 只有字母、数字或下划线
为了澄清,我在代码中有3个不同的案例,每个案例都需要不同的验证。用C语言实现这一点最简单的方法是什么?
只有字母:
1 | Regex.IsMatch(input, @"^[a-zA-Z]+$"); |
只有字母和数字:
1 | Regex.IsMatch(input, @"^[a-zA-Z0-9]+$"); |
仅字母、数字和下划线:
1 | Regex.IsMatch(input, @"^[a-zA-Z0-9_]+$"); |
1 2 3 4 5 | bool result = input.All(Char.IsLetter); bool result = input.All(Char.IsLetterOrDigit); bool result = input.All(c=>Char.IsLetterOrDigit(c) || c=='_'); |
只限信件:
1 | Regex.IsMatch(theString, @"^[\p{L}]+$"); |
字母和数字:
1 | Regex.IsMatch(theString, @"^[\p{L}\p{N}]+$"); |
字母、数字和下划线:
1 | Regex.IsMatch(theString, @"^[\w]+$"); |
注意,这些模式还匹配国际字符(与使用
对于那些不愿意使用regex并使用.NET 2.0框架(又称no linq)的用户:
只有字母:
1 2 3 4 5 6 7 8 9 | public static bool IsAllLetters(string s) { foreach (char c in s) { if (!Char.IsLetter(c)) return false; } return true; } |
只有数字:
1 2 3 4 5 6 7 8 9 | public static bool IsAllDigits(string s) { foreach (char c in s) { if (!Char.IsDigit(c)) return false; } return true; } |
只有数字或字母:
1 2 3 4 5 6 7 8 9 | public static bool IsAllLettersOrDigits(string s) { foreach (char c in s) { if (!Char.IsLetterOrDigit(c)) return false; } return true; } |
只有数字、字母或下划线:
1 2 3 4 5 6 7 8 9 | public static bool IsAllLettersOrDigitsOrUnderscores(string s) { foreach (char c in s) { if (!Char.IsLetterOrDigit(c) && c != '_') return false; } return true; } |
我认为使用正则表达式是一个很好的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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_]+$"); } |
您可以循环字符串的字符,并使用char方法isletter进行检查。但您也可以使用string方法indexofany来搜索其他不在字符串中的字符。
如果你是一个新手,那么你可以从我的代码中引用。我做的是开支票,这样我只能得到字母和空格!可以在第二个if语句之后重复for循环,以再次验证字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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(); } |
迭代字符串字符并使用名为"isletter"和"isdigit"的"char"函数。
如果您需要更具体的东西-使用regex类。
最近,我在这个页面的帮助下对检查字符串中字母的函数进行了性能改进。
我发现使用regex的解决方案比使用char.isletterdigit检查的解决方案慢30倍。
我们不确定这些字母或数字是否包含,而且我们只需要拉丁字符,因此基于char.isletterdigit函数的反编译版本实现了我们的函数。
以下是我们的解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 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; } } |
用法如下:
1 2 | if( logicalId.All(c => CheckAllowedChars(c))) { // Do your stuff here.. } |