Regex c#:电子邮件中的姓氏,仅包含一个连字符
朋友们, 我有一个文本框,它取我所在组织的名字。 姓氏可能包含也可能不包含连字符。如果包含,则应显示, 1) 姓氏只有一次 2) 不是在姓氏的开头 3) 不是在姓氏的末尾 我已经弄明白了这个正则表达式 ^(?!{51})[a-zA-Z]+(?:[.][a-zA-Z-]+)$ 这包括姓氏中的“-”。但不满足上述条件 我仍在学习正则表达式,并正在花时间来解决这个问题。 请帮忙Regex c#:电子邮件中的姓氏,仅包含一个连字符,c#,regex,C#,Regex,朋友们, 我有一个文本框,它取我所在组织的名字。 姓氏可能包含也可能不包含连字符。如果包含,则应显示, 1) 姓氏只有一次 2) 不是在姓氏的开头 3) 不是在姓氏的末尾 我已经弄明白了这个正则表达式 ^(?!{51})[a-zA-Z]+(?:[.][a-zA-Z-]+)$ 这包括姓氏中的“-”。但不满足上述条件 我仍在学习正则表达式,并正在花时间来解决这个问题。 请帮忙 -谢谢您需要在姓氏部分中再添加一个嵌套组: ^(?!.{51})[a-zA-Z]+(?:\.[a-zA-Z]+(?:-[a-
-谢谢您需要在姓氏部分中再添加一个嵌套组:
^(?!.{51})[a-zA-Z]+(?:\.[a-zA-Z]+(?:-[a-zA-Z]+)?)?$
^^^^^^^^^^^^^^^
见
详细信息:
-字符串的开头^
-字符串要求不超过50个字符(?!.{51})
-1+ASCII字母[a-zA-Z]+
-可选序列:(?:\.[a-zA-Z]+(?:-[a-zA-Z]+)?
-一个点\。
-1个或多个ASCII字母[a-zA-Z]+
-可选序列:(?:-[a-zA-Z]+)?
-连字符-
-1+ASCII字母[a-zA-Z]+
-字符串结束$
var pattern = @"^(?!.{51})[a-zA-Z]+(?:\.[a-zA-Z]+(?:-[a-zA-Z]+)?)?$";
要匹配任何Unicode字母,请使用
\p{L}
而不是[a-zA-Z]
这是一个快速而肮脏的解决方案
^(?。{51})[a-zA-Z]+.{1}[a-zA-Z]{1,}-?[a-zA-Z]+$
字符串的第一部分仍然由您使用。它看起来很相配。
我的加法{1}[a-zA-Z]{1,}-?[a-zA-Z]+
简单地描述了接下来会发生什么
[a-zA-Z]{1,}
确保点后至少有一个字符,因此不能将“-”作为开头-?
仅描述在写入第一个字符后的某处可能会出现“-”[a-zA-Z]+
只是说可能会有用户想要的任意多个字符。但不再是“-”了谢谢你。不仅仅是为了解决问题,也是为了向像我这样的初学者解释问题,让他们明白。