如何编写匹配首尾为指定字母的显示名称的正则表达式?
问题排查
你原有正则的核心问题是强制首字母之后的所有字母前必须跟随指定符号,无法匹配连续字母的常规名称拼写场景。
修正后正则
display_name.match(/^[a-zàáèéìíòóùú]+(?:[.' -]+[a-zàáèéìíòóùú]+)*$/i);
表达式中的?:为非捕获分组标记,如果你不需要提取分组内容可以直接删除,不会影响整体匹配效果。如果需要限制中间符号不可连续出现,把[.' -]+修改为[.' -]即可。
匹配效果验证
符合你提出的所有规则:
- 首尾自动限制为英文字母+àáèéìíòóùú共10个指定特殊字母,禁止其他字符、符号出现在首尾
- 中间仅允许出现英文句号、单引号、连字符、空格四种符号
- 可正常匹配你给出的示例:
Mr. Benardó:匹配成功Mrs. àdelaidé adegòke:匹配成功
- 非法场景自动拦截:
- 首尾为符号的名称(如
.Jack、Li-):匹配失败 - 包含其他特殊字符、数字的名称(如
Wang123、Zhang@Ming):匹配失败
- 首尾为符号的名称(如
内容的提问来源于stack exchange,提问作者The concise
相关产品推荐
相关产品推荐

