我从控制台读取了一个字符串。如何确保它只包含英文字符和数字?
我从控制台读取了一个字符串。如何确保它只包含英文字符和数字?
^[a-zA-Z0-9 ]*$
例如:if( Regex.IsMatch(Console.ReadLine(), "^[a-zA-Z0-9]*$") )
{ /* your code */ }
^[a-zA-Z0-9]*$
^
匹配字符串的开头(即在此之前没有字符允许出现)[a-zA-Z0-9]
匹配任何小写或大写字母a到z以及数字0-9*
让前面的匹配重复零次或多次$
匹配字符串的结尾(即在此之后没有字符允许出现)要在C#程序中使用该表达式,您需要导入System.Text.RegularExpressions
并在代码中执行类似于以下操作:
bool match = Regex.IsMatch(input, "^[a-zA-Z0-9]*$");
如果你要对许多行进行模式匹配测试,你可能想要编译表达式:
Regex pattern = new Regex("^[a-zA-Z0-9]*$", RegexOptions.Compiled);
for (int i = 0; i < 1000; i++)
{
string input = Console.ReadLine();
pattern.IsMatch(input);
}
被接受的答案无法处理空格或标点符号。以下代码已经过此输入测试:
Hello: 1. - a; b/c \ _(5)??
(是英文)
Regex regex = new Regex("^[a-zA-Z0-9. -_?]*$");
string text1 = "سلام";
bool fls = regex.IsMatch(text1); //false
string text2 = "123 abc! ?? -_)(/\\;:";
bool tru = regex.IsMatch(text2); //true
IsLower
和IsUpper
是否都不返回true。类似这样的代码:private bool IsAllCharEnglish(string Input)
{
foreach (var item in Input.ToCharArray())
{
if (!char.IsLower(item) && !char.IsUpper(item) && !char.IsDigit(item) && !char.IsWhiteSpace(item))
{
return false;
}
}
return true;
}
string str = "فارسی abc";
IsAllCharEnglish(str); // return false
str = "These are english 123";
IsAllCharEnglish(str); // return true
不要使用正则表达式和LINQ,它们比逐个字符循环字符串更慢。
我的解决方案:
private static bool is_only_eng_letters_and_digits(string str)
{
foreach (char ch in str)
{
if (!(ch >= 'A' && ch <= 'Z') && !(ch >= 'a' && ch <= 'z') && !(ch >= '0' && ch <= '9'))
{
return false;
}
}
return true;
}
bool onlyEnglishCharacters = !EnglishText.Any(a => a > '~');
看起来很便宜,但对我有用,是真正的简单答案。 希望能帮到任何人。
NUL
,BEL
和其他低端ASCII字符都小于“~” - 这使得它比必要的更加脆弱。添加一个|| a < '0'
,你就会更接近解决方案 :-) - Sean Vieira<?php
$string="हिन्दी";
$string="Manvendra Rajpurohit";
echo strlen($string); echo '<br>';
echo mb_strlen($string, 'utf-8');
echo '<br>';
if(strlen($string) != mb_strlen($string, 'utf-8'))
{
echo "Please enter English words only:(";
}
else {
echo "OK, English Detected!";
}
?>
bool AllAscii(string str)
{
return !str.Any(c => !Char.IsLetterOrDigit(c));
}
如果你想要控制输入,可以像这样做:
static string ReadLettersAndDigits() {
StringBuilder sb = new StringBuilder();
ConsoleKeyInfo keyInfo;
while ((keyInfo = Console.ReadKey(true)).Key != ConsoleKey.Enter) {
char c = char.ToLower(keyInfo.KeyChar);
if (('a' <= c && c <= 'z') || char.IsDigit(c)) {
sb.Append(keyInfo.KeyChar);
Console.Write(c);
}
}
return sb.ToString();
}