3

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

  1. 34556#%42%$23$%^*&sdfsfr- 有效的
  2. 34556#%42%$23$%^*&בלה בלה- 无效

我可以用 Linq 做到这一点吗?正则表达式?

谢谢

4

3 回答 3

3

也许你可以使用

using System.Linq;

...

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

这认为所有 ASCII 字符都是“有效的”(甚至是控制字符)。但是标点符号和 ASCII 以外的其他特殊字符不是“有效的”。如果strnull,则抛出异常。

于 2012-06-11T08:46:20.923 回答
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");

    }
}

一些更基本的正则表达式解释:每个程序员都应该知道的正则表达式

于 2012-06-11T08:47:23.530 回答
1

您可以尝试的一件事是将您想要的字符放入此 regx

bool IsValid(string input) {     
  return !(Regex.IsMatch(@"[^A-Za-z0-9'\.&@:?!()$#^]", input)); 
}

regx 字符串中指定的字符以外的字符将被忽略,即返回 false..

于 2012-06-11T08:25:08.497 回答