Regex c#:电子邮件中的姓氏,只包含一个连字符
本文关键字:包含一 连字符 电子邮件 Regex | 更新日期: 2023-09-27 18:14:07
朋友,我有一个使用名字的文本框。我所在组织的姓氏。姓氏可以包含也可以不包含连字符。如果它包括,那么它应该出现,1( 姓氏中只有一次2( 不在姓的开头3( 不在姓氏的末尾
我把这个Regex搞清楚了
^(?!.{51}([a-zA-Z]+(?:[.][a-zA-Z-]+(?$
这包括姓氏中的"-"。但不满足上述条件。
我仍在学习正则表达式,并且正在花时间来弄清楚这一点。请帮助
-感谢
您需要在姓氏部分中再添加一个嵌套组:
^(?!.{51})[a-zA-Z]+(?:'.[a-zA-Z]+(?:-[a-zA-Z]+)?)?$
^^^^^^^^^^^^^^^
查看regex演示
详细信息:
^
-字符串的开头(?!.{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]
。
这是一个快速而肮脏的解决方案。
^(?!.{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]+
只是说,用户想要多少字符就有多少字符。但不再是"-">