Skip to main content
 首页 » 编程设计

c#之正则表达式 c# : Last Name in an email to include only one hyphen

2024年04月17日36cloudgamer

friend 们, 我有一个文本框,它为我的组织取 firstname.Lastname。 姓氏可能包含也可能不包含连字符。如果包含,那么它应该出现, 1)姓氏只有一次 2) 不在姓氏开头 3) 不在姓氏末尾

我想通了这个正则表达式

^(?!.{51})[a-zA-Z]+(?:[.][a-zA-Z-]+)?$

这包括姓氏中的“-”。但不会满足以上条件。

我仍在学习正则表达式,正在花时间弄清楚这一点。 请帮忙

-谢谢

请您参考如下方法:

您需要在姓氏部分再添加一个嵌套组:

^(?!.{51})[a-zA-Z]+(?:\.[a-zA-Z]+(?:-[a-zA-Z]+)?)?$ 
                                 ^^^^^^^^^^^^^^^  

参见 regex demo

详细信息:

  • ^ - 字符串的开始
  • (?!.{51}) - 字符串要求不超过 50 个字符
  • [a-zA-Z]+ - 1+ 个 ASCII 字母
  • (?:\.[a-zA-Z]+(?:-[a-zA-Z]+)?)? - 一个可选序列:
    • \. - 一个点
    • [a-zA-Z]+ - 1 个或多个 ASCII 字母
    • (?:-[a-zA-Z]+)? - 一个可选序列:
      • - - 连字符
      • [a-zA-Z]+ - 1+ 个 ASCII 字母
  • $ - 字符串结尾。

要声明此模式,请使用逐字字符串文字:

var pattern = @"^(?!.{51})[a-zA-Z]+(?:\.[a-zA-Z]+(?:-[a-zA-Z]+)?)?$"; 

要匹配任何 Unicode 字母,请使用 \p{L} 而不是 [a-zA-Z]。