Regex仅限制大写字母
本文关键字:大写字母 Regex | 更新日期: 2023-09-27 18:25:05
我仍在努力理解Regex是如何准确工作的。
我正在获取用户名,它们的格式是:
firstname.lastname
两个名称都可能包含特殊的国际字符,也可能包含'或-,但我只需要检测它们是否包含大写字母,这样我就可以抛出异常。
我使用这个表达式
[^A-Z].[^A-Z]
在我看来,这应该奏效,我只是不明白为什么不行。
我希望有人能解释一下。
谢谢!
[^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]
您应该使用start
和end
正则表达式符号,并签名表示这可以是多个符号。如果我没记错的话,它应该是类似^[^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