【问题标题】:regular expression allow Latin letters and digitals number and disallow space正则表达式允许拉丁字母和数字数字并且不允许空格
【发布时间】:2013-11-17 21:12:14
【问题描述】:

我的正则表达式只允许拉丁字母和数字数字并且不允许空格。但是这个表达式错过了存在空间的字符串。在我的代码中,我需要查看真假。但我看到的是真实的和真实的。它是如何解决的?

String str1="5asdfEDadgs2";
String str2 = "5 asdfgsadgs2";
String reg=@"^[a-zA-Z]|[0-9]|.*$"

bool res = Regex.Match(str1,reg). Success; //Must show true
bool res2 = Regex.Match(str2, reg).Success; //Must show false

Console.WriteLine(res);
Console.WriteLine(res2);

【问题讨论】:

  • 您会看到true,因为它只匹配.*,这意味着:每个字符(换行符除外)从零到无限次。如果你坚持使用正则表达式,你就快到了:使用^[A-Za-z0-9]+$。这仅匹配给定范围内的一个或多个字符,如果遇到任何其他字符将失败。

标签: c# regex


【解决方案1】:

您实际上并不需要正则表达式,您可以简单地使用char.IsLetterOrDigit 和一点 LINQ:

String str1="5asdfEDadgs2";
String str2 = "5 asdfgsadgs2";

bool res = str1.All(char.IsLetterOrDigit); //True
bool res2 = str2.All(char.IsLetterOrDigit); //False

您也可以编写等效的str1.All(c => char.IsLetterOrDigit(c)),但我发现方法组形式更清晰。

【讨论】:

  • Visual Studio 没有得到“All”方法。
  • @user2956406 在文件顶部添加using System.Linq;。如果你有 ReSharper,你也可以按 ALT + ENTER,它会自动添加 using 指令。
  • 从来没有做过这个特殊的测试,但是:Regex 应该比 Linq 快得多,无论是一般情况还是特别来说。
  • 我认为 OP 的意思是 ASCII 范围内的字母和数字。 IsLetterOrDigit 的(链接)文档指出有效字母和十进制数字是 UnicodeCategory 中以下类别的成员:UppercaseLetter、LowercaseLetter、TitlecaseLetter、ModifierLetter、OtherLetter 或 DecimalDigitNumber。 检查DecimalDigitNumber category 表明它包含来自各种语言/字母的 十进制数字或数字 ...另请参阅以下答案:stackoverflow.com/a/228565/1809799 接受的答案中给出的正则表达式应该完全做到这一点。
【解决方案2】:

尝试将您的正则表达式更改为:

^[A-Za-z0-9]+$

您当前的正则表达式中有 |.* 这实际上是“或任何字符(包括空格)”

【讨论】:

  • 或者只是^[A-Za-z0-9]+$
猜你喜欢
  • 1970-01-01
  • 2022-01-14
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
相关资源
最近更新 更多