【问题标题】:.NET RegEx for letters and spaces.NET RegEx 用于字母和空格
【发布时间】:2010-06-01 15:21:24
【问题描述】:

我正在尝试在 C# 中创建一个只允许字母数字字符和空格的正则表达式。目前,我正在尝试以下方法:

string pattern = @"^\w+$";
Regex regex = new Regex(pattern);
if (regex.IsMatch(value) == false)
{
  // Display error
}

我做错了什么?

【问题讨论】:

  • @user:仅供参考,与 JavaScript 不同,C# 不支持正则表达式。您实际上是在询问 .NET 正则表达式。

标签: c# .net regex


【解决方案1】:

如果你只需要英语,试试这个正则表达式:

"^[A-Za-z ]+$"

括号指定一组字符

A-Z: 全部大写

a-z: 全部小写

' ':空格

如果你需要 unicode / 国际化,你可以试试这个正则表达式:

@"$[\\p{L}\\s]+$"

https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#word-character-w

这个正则表达式会匹配所有的unicode字母和空格,可能比你需要的多,所以如果你只需要英文/基本的罗马字母,第一个正则表达式会更简单,执行起来也更快。

请注意,对于这两个正则表达式,我都包含了 ^$ 运算符,这意味着在开始和结束时匹配。如果你需要从一个字符串中提取它并且它不需要是整个字符串,你可以删除这两个操作符。

【讨论】:

  • 那不是字母,那是 ASCII 字母。除美国以外的任何地方都可以打破。
【解决方案2】:

对所有带空格的字母试试这个:

@"[\p{L} ]+$"

【讨论】:

  • 问题听起来“.NET RegEx for letters and spaces”,与数字无关,所以这个答案是正确的。
  • 这似乎是迄今为止最好的答案(也是为数不多的正确答案之一。其他答案有时与标点符号或数字匹配)。我刚刚使用在线正则表达式测试器对此进行了测试。
  • 添加\p{L}的解释和参考
【解决方案3】:

字符类\w 不匹配空格。尝试用[\w ]替换它(\w后面有一个空格来匹配单词字符和空格。如果你想匹配任何空格,你也可以用\s替换空格。

【讨论】:

  • 在我的回答下跟进 Michael 的评论,我认为这更适合这里:请注意 \w 不仅匹配字母。它还匹配标点符号(破折号、点、逗号等):msdn.microsoft.com/en-us/library/6w3ahtyy.aspxmsdn.microsoft.com/en-us/library/…
  • @Abel:\w 匹配的(除了字母和十进制数字)是 connector 标点符号。完整列表是 here,但您在实践中可能会看到的唯一一个是 _,即 ASCII 低线或下划线字符 (U+005F)。
  • \w 也匹配数字。
【解决方案4】:

如果除了 0-9、az 和 AZ 之外,您还需要覆盖任何重音字母,例如 ï、é、æ、Ć 或 Ş,那么您最好使用 Unicode 属性 \p{...} 进行匹配,即(注意空间):

string pattern = @"^[\p{IsLetter}\p{IsDigit} ]+$";

【讨论】:

  • 实际上,除非您指定ECMAScript,否则\w 使用那些Unicode 属性等等:msdn.microsoft.com/en-us/library/…
  • 也许我理解错了,但 ECMAScript 修饰符不会影响 Unicode 属性的行为。它确实会影响\w 的行为。你是对的:\w 匹配的不仅仅是字母,它还匹配逗号、冒号、重音等标点符号。 `\p{IsLetter} 更精确,只匹配字母:msdn.microsoft.com/en-us/library/yyxz6h5w.aspx
  • 是的,我认为我们说的是同一件事 ;-) 这完全取决于 OP 的需求。我只是指出\w[0-9a-zA-Z] 匹配更多。例如,它还包括重音字母(除非指定了ECMAScript)。
【解决方案5】:

这个正则表达式非常适合我。

           Regex rgx = new Regex("[^a-zA-Z0-9_ ]+");
            if (rgx.IsMatch(yourstring))
            {
                var err = "Special charactes are not allowed in Tags";
            }

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 2013-01-16
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    相关资源
    最近更新 更多