C# 如何验证字符串是否为英语?
我从控制台读取字符串。如何确保它只包含英文字符和数字?假设“英文字符”只是指26个字符的拉丁字母表,这将是我使用正则表达式的一个领域:C# 如何验证字符串是否为英语?,c#,string,character-encoding,C#,String,Character Encoding,我从控制台读取字符串。如何确保它只包含英文字符和数字?假设“英文字符”只是指26个字符的拉丁字母表,这将是我使用正则表达式的一个领域:^[a-zA-Z0-9]*$ 例如: if( Regex.IsMatch(Console.ReadLine(), "^[a-zA-Z0-9]*$") ) { /* your code */ } 在本例中,正则表达式的好处是,您真正关心的是字符串是否与模式匹配——这是正则表达式工作得非常出色的地方。它清楚地抓住了你的意图,如果你把“英语字符”的定义扩展到26个字母
^[a-zA-Z0-9]*$
例如:
if( Regex.IsMatch(Console.ReadLine(), "^[a-zA-Z0-9]*$") )
{ /* your code */ }
在本例中,正则表达式的好处是,您真正关心的是字符串是否与模式匹配——这是正则表达式工作得非常出色的地方。它清楚地抓住了你的意图,如果你把“英语字符”的定义扩展到26个字母以外,它就很容易扩展
有一个不错的方法可以教授更多关于正则表达式的知识
Jørn Schou Rode的回答很好地解释了这里的正则表达式如何匹配您的输入。您可以将其与此正则表达式匹配:
^[a-zA-Z0-9]*$
匹配字符串的开头(即在此点之前不允许有字符)^
匹配小写或大写字母a-z中的任何字母,以及数字0-9[a-zA-Z0-9]
允许上一个匹配重复零次或多次*
匹配字符串的结尾(即此点后不允许有字符)$
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);
}
Regex模式=新的Regex(“^[a-zA-Z0-9]*$”,RegexOptions.Compiled);
对于(int i=0;i<1000;i++)
{
字符串输入=Console.ReadLine();
pattern.IsMatch(输入);
}
类似这样的内容(如果您想控制输入):
静态字符串readlettersanddights(){
StringBuilder sb=新的StringBuilder();
ConsoleKeyInfo-keyInfo;
while((keyInfo=Console.ReadKey(true)).Key!=ConsoleKey.Enter){
char c=char.ToLower(keyInfo.KeyChar);
如果(('a'你有网络访问权限吗?我想这不能保证,但谷歌有一个语言api,可以检测你传递给它的语言。
如果我不想使用正则表达式,只是为了提供一个替代解决方案,您可以只检查每个字符的ASCII码,如果它位于该范围内,则可能是英文字母或数字(这可能不是最佳解决方案):
foreach(字符串ToCharArray()中的字符)
{
int x=(int)字符;
如果(x>=63和x=48和x我同意正则表达式的答案。但是,您可以将其简化为“^[\w]+$”。\w是任何“单词字符”(如果您使用非unicode字母表,它将转换为[a-zA-Z_0-9])。我不知道您是否也需要下划线
有关.net中正则表达式的更多信息,请参见:
看起来很便宜,但对我来说很有效,这是一个非常简单的答案。
希望它对任何人都有帮助。正如许多人指出的那样,只有当字符串中只有一个单词时,公认的答案才有效。由于没有答案涵盖字符串中多个单词甚至句子的情况,下面是代码:
stringToCheck.Any(x=> char.IsLetter(x) && !((int)x >= 63 && (int)x <= 126));
stringToCheck.Any(x=>char.isleter(x)&&&!((int)x>=63&&(int)x另一种方法是检查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,因为它们比字符串循环慢
我的解决方案:
foreach (char ch in str.ToCharArray())
{
int x = (int)char;
if (x >= 63 and x <= 126)
{
//this is english letter, i.e.- A, B, C, a, b, c...
}
else if(x >= 48 and x <= 57)
{
//this is number
}
else
{
//this is something diffrent
}
}
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;
}
private static bool仅为英文字母和数字(字符串str)
{
foreach(char-ch-in-str)
{
如果(!(ch>='A'&&ch='A'&&ch='0'&&ch接受的答案不适用于空格或标点符号。针对此输入测试以下代码:
您好:1.-a;b/c\\(5)?
(是英语)
IsLetterOrDigit适用于任何Unicode字母。不仅适用于英语。我说的对吗?根据我的测试,它的结果是错误的。Char.IsLetterOrDigit似乎无法区分西方字母和其他字母。在这里使用Char.IsLetterOrDigit是没有用的。您可能还需要包括空格;“a b c”对于给定的正则表达式模式,返回false。那么像省略号(…)或卷曲撇号这样的标点符号呢?它们有自己的unicode字符。这个错误的答案错误地将ASCII与“英语”等同起来。这是难以置信的错误-正如此注释清楚地表明的那样。“英语字符”是什么对你来说(更不用说脚本和语言是完全不同的东西,英语使用拉丁语了)?“naïve”是一个完全有效的英语单词,但它包含一个非ASCII字母。如果你的域名确实是“英语单词字符串”,那么你必须比你的意思更加小心“ASCII字母和数字字符串”。当“仅包含英文字符和数字”如此含糊不清时,九个人认为这个问题“有用且清晰”,这有点令人惊讶…@Akash:好吧,现在的要求几乎是无用的。我想不出任何合理的方法来约束字符串“英语字符”(在我看来,这意味着“书写英语文本所需的字符”)。这当然包括标点符号、各种拉丁字母的变体(cedilla、diaeresis和c)当然,考虑到这些限制,你可以很好地用这组字符书写许多其他欧洲语言。我想他说的是真的,只是一个英语字符列表……据我所知,英语单词除了使用拉丁字母表中的26个字母外,没有其他用途除了输入的单词。我不再局限于使用普通的英语键盘可以写的东西,而忘记了“facade”和其他类似的单词。@JaredBeck:不。英语单词是“facade”拼写,带有C。
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
<?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!";
}
?>
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;
}
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