Regex仅限制大写字母

本文关键字:大写字母 Regex | 更新日期: 2023-09-27 18:25:05

我仍在努力理解Regex是如何准确工作的。

我正在获取用户名,它们的格式是:

firstname.lastname

两个名称都可能包含特殊的国际字符,也可能包含'或-,但我只需要检测它们是否包含大写字母,这样我就可以抛出异常。

我使用这个表达式

[^A-Z].[^A-Z]

在我看来,这应该奏效,我只是不明白为什么不行。

我希望有人能解释一下。

谢谢!

Regex仅限制大写字母

[^A-Z]简单地表示从大写a到大写Z的任何字符。

.表示应该使用'.的任何字符,因为这表示文字字符.

一个字符组是[],相反的是[^],然后放入要匹配的字符。

然而,您的正则表达式看起来只匹配一个不是大写字母的字符,然后匹配任何字符,然后再匹配另一个不是小写字母的字符

您想要使用以下内容:

[^A-Z]+'.[^A-Z]+

正则表达式中的+表示将前面所述的1匹配到无限次。

如果你只想有这个文本而没有其他文本,你应该包括行首和行尾标记,这样它就不会与包含你提到的格式的长字符串匹配。

但是,您的正则表达式也匹配空格和制表符。

所以我会使用以下内容:

^[^A-Z's]+'.[^A-Z's]+$

Regex Demo只使用小写

Regex Demo失败,因为用户名有大写字母

您可以使用此方法来检查大写字符,而不是使用regex。

public static bool checkStringForUpperCase(string s) 
{
    for (int i = 0; i < s.Length; i++)
    {
        if (char.IsUpper(s[i]))
            return false;
    }
    return true;
}

如果你想检查是否有大写字母,你不需要点int中间,你可以只使用[^A-Z]您应该使用startend正则表达式符号,并签名表示这可以是多个符号。如果我没记错的话,它应该是类似^[^A-Z]*$ 的东西

显然,唯一正确的答案是使用'p{Lu}来匹配大写的Unicode字母。除[A-Z]外,国家字母表中还有其他大写字母。

如果您只想检查它是否包含大写字母。试试这个。

  string test = @"Test";
  string test2 = "test";
  bool result = test.Any(x=>char.IsUpper(x));  //true
  result = test2.Any(x => char.IsUpper(x));//false