如何防止非英文字符并允许非字母字符

时间:2012-06-11 08:20:22

标签: c# regex

我有一个字符串,我想确保其中的每个字母都是英文。 其他人物,我不在乎。

  1. 34556#%42%$23$%^*&sdfsfr - 有效
  2. 34556#%42%$23$%^*&בלה בלה - 无效
  3. 我可以用Linq做到吗?正则表达式?

    由于

3 个答案:

答案 0 :(得分:3)

也许你可以使用

using System.Linq;

...

static bool IsValid(string str)
{
  return str.All(c => c <= sbyte.MaxValue);
}

这会将所有ASCII字符视为“有效”(甚至是控制字符)。但是ASCII之外的标点符号和其他特殊字符不是“有效”。如果strnull,则会引发异常。

答案 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 ..

相关问题