You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何编写正则表达式以限制姓名-姓氏模式,避免出现两个独立单字符的缩写形式?

调整正则表达式以禁止姓名姓氏均为单字符的情况

我完全理解你的需求——你希望保留那些至少有一个部分(名或姓)长度大于1的姓名格式,同时精准排除掉名和姓都是单字符(无论带不带点)的情况。

先分析下你原来的正则:^[a-zA-ZöÖşŞçÇüÜıİğĞ.]{1,}(?:\s{1}[a-zA-ZöÖşŞçÇüÜıİğĞ.]{1,})+$,它只要求每个姓名部分至少有1个字符,所以会误匹配R DR. D.这类不符合要求的格式。

修改后的正则表达式

^(?![a-zA-ZöÖşŞçÇüÜıİğĞ.]\s[a-zA-ZöÖşŞçÇüÜıİğĞ.]$)(?![a-zA-ZöÖşŞçÇüÜıİğĞ.]\.\s[a-zA-ZöÖşŞçÇüÜıİğĞ.]\.$)[a-zA-ZöÖşŞçÇüÜıİğĞ.]{1,}(?:\s[a-zA-ZöÖşŞçÇüÜıİğĞ.]{1,})+$

关键逻辑解释

这个正则在你原有规则的基础上,新增了两个负向前瞻断言来排除非法情况:

  1. (?![a-zA-ZöÖşŞçÇüÜıİğĞ.]\s[a-zA-ZöÖşŞçÇüÜıİğĞ.]$):专门排除不带点的单字符名+单字符姓(比如R D)的格式。
  2. (?![a-zA-ZöÖşŞçÇüÜıİğĞ.]\.\s[a-zA-ZöÖşŞçÇüÜıİğĞ.]\.$):专门排除带点的单字符名+带点的单字符姓(比如R. D.)的格式。
  3. 后半部分保留了你原有的规则,确保姓名由至少两个部分组成,每个部分只能包含允许的字母(含土耳其语特殊字母)和点,且每个部分至少有1个字符。

验证结果

合法格式(会通过校验)

  • R Downey
  • Robert D
  • R. Downey
  • Robert D.
  • Robert Downey

非法格式(会被拒绝)

  • R D
  • R. D.

如果之后需要支持包含中间名的多部分姓名(比如R J Downey),这个正则也能正常工作——只要不是所有部分都是单字符(带点或不带点),就会被允许。

内容的提问来源于stack exchange,提问作者muhammed.ozer

火山引擎 最新活动