我有一个字符串,我想确保其中的每个字母都是英文。 其他人物,我不在乎。
34556#%42%$23$%^*&sdfsfr
- 有效34556#%42%$23$%^*&בלה בלה
- 无效我可以用Linq做到吗?正则表达式?
由于
答案 0 :(得分:3)
也许你可以使用
using System.Linq;
...
static bool IsValid(string str)
{
return str.All(c => c <= sbyte.MaxValue);
}
这会将所有ASCII字符视为“有效”(甚至是控制字符)。但是ASCII之外的标点符号和其他特殊字符不是“有效”。如果str
为null
,则会引发异常。
答案 1 :(得分:3)
您可以在字符类中定义要允许的所有字符/字符范围/ Unicode属性/块,或者您不希望允许。
[abc]
是一个允许a和b和c
[^abc]
是一个否定的字符类,它匹配所有但不是a或b或c
在你的情况下,我会这样做,不需要定义每个角色:
^[\P{L}A-Za-z]*$
从字符串的开头到结尾匹配不是字母[^\p{L}]
或A-Za-z
的所有内容。
\p{L}
是一个Unicode属性,匹配具有属性字母的所有内容。 \P{L}
是否定版本,一切都不是字母。
测试代码:
string[] StrInputNumber = { "34556#%42%$23$%^*&sdfsfr", "asdf!\"§$%&/()=?*+~#'", "34556#%42%$23$%^*&בלה בלה", "öäü!\"§$%&/()=?*+~#'" };
Regex ASCIILettersOnly = new Regex(@"^[\P{L}A-Za-z]*$");
foreach (String item in StrInputNumber) {
if (ASCIILettersOnly.IsMatch(item)) {
Console.WriteLine(item + " ==> Contains only ASCII letters");
}
else {
Console.WriteLine(item + " ==> Contains non ASCII letters");
}
}
一些更基本的正则表达式解释:What absolutely every Programmer should know about regular expressions
答案 2 :(得分:1)
你可以尝试的一件事就是把你想要的字符放在这个正则表达式
中bool IsValid(string input) {
return !(Regex.IsMatch(@"[^A-Za-z0-9'\.&@:?!()$#^]", input));
}
除了regx字符串中指定的之外的字符串被忽略,即返回false ..