我有一个字符串,我想确保其中的每个字母都是英文的。其他角色,我不在乎。
34556#%42%$23$%^*&sdfsfr
- 有效的34556#%42%$23$%^*&בלה בלה
- 无效
我可以用 Linq 做到这一点吗?正则表达式?
谢谢
也许你可以使用
using System.Linq;
...
static bool IsValid(string str)
{
return str.All(c => c <= sbyte.MaxValue);
}
这认为所有 ASCII 字符都是“有效的”(甚至是控制字符)。但是标点符号和 ASCII 以外的其他特殊字符不是“有效的”。如果str
是null
,则抛出异常。
您可以在字符类中定义您想要允许或不想允许的所有字符/字符范围/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");
}
}
一些更基本的正则表达式解释:每个程序员都应该知道的正则表达式
您可以尝试的一件事是将您想要的字符放入此 regx
bool IsValid(string input) {
return !(Regex.IsMatch(@"[^A-Za-z0-9'\.&@:?!()$#^]", input));
}
regx 字符串中指定的字符以外的字符将被忽略,即返回 false..