正则表达式仅限制大写

lai*_*ha0 5 c# regex regex-negation

我很难理解Regex的工作原理.

我收到用户名,他们采用以下格式:

firstname.lastname
Run Code Online (Sandbox Code Playgroud)

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

我正在使用这个表达式

[^A-Z].[^A-Z]
Run Code Online (Sandbox Code Playgroud)

在我看来,这应该工作,我只是不明白为什么它不.

我希望有人能解释一下.

谢谢!

abc*_*123 9

[^A-Z] 简单地表示任何不是资本A到资本Z的字符.

.表示您应该使用的任何字符\.因为这意味着字面字符.

一个字符组是[],[^]然后反过来放置你想要匹配的字符.

但是,你的正则表达式看起来只匹配一个不是大写字母的单个字符,然后是任何字符,然后是另一个不是大写字母的单个字符

您想要使用以下内容:

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

+在正则表达式可以匹配所陈述的前1〜无限次.

如果您只打算使用此文本而不包含其他文本,则应包含行首和行尾标记,以使其与包含您提到的格式的长字符串不匹配.

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

所以我会使用以下内容:

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

正则表达式演示只使用小写

正则表达式演示失败,因为用户名具有大写字母

  • @ user2247823是或者你可以这样做@"^ [^ AZ\s] + \.[^ AZ\s] + $"允许转义字符而不转义\是c#中的转义字符.这就是为什么你需要保持这样的原因 (2认同)
  • @ user2247823如果你在一个字符串中使用``\``,那么它可能会抱怨不能识别[转义序列](http://www.codeproject.com/Articles/371232/Escaping-in-Csharp-characters -strings串预估).使用``\\``告诉C#编译器你想在字符串中使用*literal*````` (2认同)