如何编写仅允许[-_.]单种分隔符且首尾不含分隔符的正则表达式
符合要求的正则表达式
^[a-zA-Z0-9]+(?:([-_.])[a-zA-Z0-9]+(?:\1[a-zA-Z0-9]+)*)?$
规则逻辑说明
- 首尾限制:开头和结尾都强制匹配字母/数字,完全避免分隔符出现在首尾的情况
- 分隔符唯一性限制:第一次匹配到的分隔符会被捕获到分组1,后续所有出现的分隔符必须和分组1的内容完全一致,天然避免混用多种分隔符的问题
- 支持连续相同分隔符:比如
google--facebook这类连续使用同一个分隔符的场景也可以正常匹配
原正则的问题
你之前写的^[a-z-A-Z0-9_.]$存在三个明显缺陷:
- 仅能匹配长度为1的字符串,完全无法满足多字符场景需求
- 没有限制分隔符不能出现在首尾
- 没有做分隔符唯一性校验,允许三种分隔符混用
内容的提问来源于stack exchange,提问作者Roy
相关产品推荐
相关产品推荐

