繁体   English   中英

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

[英]how to prevent non-English characters and allow non-alpha characters

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

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

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

谢谢

也许你可以使用

using System.Linq;

...

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

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

您可以在字符类中定义要允许的所有字符/字符范围/ 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 ..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM