如何编写类LinkedIn格式的全名正则匹配验证表达式?
类LinkedIn全名正则验证解决方案
问题分析
你之前的正则/^[a-zA-Z]+([a-zA-Z\s.-]*[a-zA-Z]+)*(\.\s*[a-zA-Z]*)?$/存在漏洞:其中的[a-zA-Z\s.-]*允许连续的非字母字符(比如多个点、连字符),因此会匹配像John..Doe.这类不符合规则的案例。
符合要求的正则表达式
根据你列出的6条规则,修正后的正则如下:
/^[a-zA-Z]+(?:(?: [a-zA-Z]+)|(?:[.-][a-zA-Z]+))*\.?$/
正则各部分解释
^[a-zA-Z]+:强制字符串以至少一个字母开头,满足规则1、3;(?: ... )*:非捕获重复组,处理中间的分隔符+字母序列,确保分隔符仅出现在字母之间且不连续:(?: [a-zA-Z]+):匹配空格后跟至少一个字母,严格遵守规则6(空格后不能有点号/连字符);(?:[.-][a-zA-Z]+):匹配点号或连字符后跟至少一个字母,满足规则4;
\.?:允许字符串以单个点号结尾,符合规则5;$:匹配字符串末尾,避免多余字符。
验证结果
有效示例全部匹配:
- John. Doe.
- Jane John Doe
- Jane John Doe.
- Jane John.Doe
- Jane John-Doe
- Jane John-Doe.
无效示例全部不匹配:
- .John
- John-
- John .Doe
- John -Doe
- John--Doe
- John..Doe
- John.-Doe
内容的提问来源于stack exchange,提问作者Moshappp
相关产品推荐
相关产品推荐

