正则表达式需求:禁止字符串首尾仅含两个下划线
解决正则匹配URL子路径的问题
问题分析
你当前用的正则^(?!^__.*__$).[a-zA-Z0-9_.-]+$逻辑有误:它会错误排除所有以__开头且以__结尾的字符串(包括开头/结尾下划线数量多于2的情况),但你的真实需求是仅禁止首尾恰好为两个下划线的字符串(即__xxx__格式,且xxx首尾字符不是下划线,或字符串就是__)。
修正后的正则表达式
^(?!^(?:__$|__[^_].*[^_]__)$)[a-zA-Z0-9_.-]+$
正则说明
- 负向预查部分
(?!^(?:__$|__[^_].*[^_]__)$):专门排除两种禁止的情况:__$:仅由两个下划线组成的字符串__[^_].*[^_]__$:以两个下划线开头、两个下划线结尾,且开头下划线后第一个字符不是下划线、结尾下划线前最后一个字符不是下划线的字符串(比如__should_not_work__)
- 匹配部分
[a-zA-Z0-9_.-]+:匹配所有由字母、数字、下划线、点、横杠组成的非空字符串
验证示例
- 匹配(允许):
_should_work_、__should_work___、_should_work___、___should_work_but_doesnt__________ - 不匹配(禁止):
__should_not_work__、__
内容的提问来源于stack exchange,提问作者Kelok Chan
相关产品推荐
相关产品推荐

