我仍在努力理解 Regex 是如何工作的。
我正在获取用户名,它们采用以下格式:
firstname.lastname
这两个名称都可能包含特殊的国际字符,并且可能包含 ' 或 - 但我只需要检测它们是否包含任何大写字母,以便抛出异常。
我正在使用这个表达式
[^A-Z].[^A-Z]
在我看来,这应该可行,我只是不明白为什么它不可行。
我希望有人能解释一下。
谢谢!
我仍在努力理解 Regex 是如何工作的。
我正在获取用户名,它们采用以下格式:
firstname.lastname
这两个名称都可能包含特殊的国际字符,并且可能包含 ' 或 - 但我只需要检测它们是否包含任何大写字母,以便抛出异常。
我正在使用这个表达式
[^A-Z].[^A-Z]
在我看来,这应该可行,我只是不明白为什么它不可行。
我希望有人能解释一下。
谢谢!
[^A-Z]
仅表示不是大写 A 到大写 Z 的任何字符。
.
表示您应该使用的任何字符\.
因为这表示文字字符.
一个字符组是[]
,反之是[^]
你然后放置你想要匹配的字符。
但是,您的正则表达式看起来只会匹配一个不是大写字母的单个字符,然后是任何字符,然后是另一个不是大写字母的单个字符
您想使用以下内容:
[^A-Z]+\.[^A-Z]+
in 正则表达式意味着将+
前面所述的 1 匹配到无限次。
如果您只拥有此文本而没有其他文本,则应包含行首和行尾标记,以便它不匹配包含您提到的格式化内容的长字符串。
但是,您的正则表达式也匹配空格和制表符。
所以我会使用以下内容:
^[^A-Z\s]+\.[^A-Z\s]+$
您可以使用此方法来检查大写字符,而不是使用正则表达式。
public static bool checkStringForUpperCase(string s)
{
for (int i = 0; i < s.Length; i++)
{
if (char.IsUpper(s[i]))
return false;
}
return true;
}
如果要检查是否没有大写,则不需要 dot int 中间,可以使用 just [^A-Z]
You should use start
and end
regex symbols 并表示这可以是多个符号。如果我没记错的话应该是这样的^[^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