2 回答
TA贡献1868条经验 获得超4个赞
根据我对您帖子的理解,您希望以下内容相匹配。
a-afdsafd
aafdsafd
aafdsa_fd
aafdsa-fd
aAfdsa-FD
以下不匹配:
aa-dsa-fd
aa-dsa_fd
-afdsafd
_afdsafd
尝试 /^[a-z](?:(?![a-z]+[\-_])[\-_])?[a-z]+(?:(?<![a-z]+[\-_])[\-_]?)[a-z]+?$/i
所述
i
改性剂能够不区分大小写匹配。在
^
与$
锚确保整个字符串我们正则表达式匹配。[a-z]
检查第一个字符是否是字母表。(?:(?![a-z]+[\-_])[\-_])?)
提前检查是否没有稍后使用的“特殊字符”,如果没有,我们可以选择匹配一个特殊字符。[a-z]+
匹配一个或多个字母。(?:(?<![a-z]+[\-_])[\-_]?)
与 4 做同样的事情,只是它向后看。[a-z]+?
可选择匹配一个或多个字母。
编辑:我注意到这aAfdsaFd_
也应该匹配。以上与此不符。稍微修改@Wiktor Stribiżew 的评论,^[a-zA-Z][a-zA-Z0-9]*(?:[-_][a-zA-Z0-9]*)?$
似乎适用于所有情况。这样更干净、更高效。所有功劳都归功于@Wiktor Stribiżew。
TA贡献1780条经验 获得超1个赞
您可以匹配字符串开头的大写或小写字符^[a-zA-Z]
,匹配零次或多次字母数字[a-zA-Z0-9]*
后跟可选的连字符或下划线[-_]?
。
最后匹配零次或多次字母数字,[a-zA-Z0-9]*$
直到字符串结束。
^[a-zA-Z][a-zA-Z0-9]*[-_]?[a-zA-Z0-9]*$
- 2 回答
- 0 关注
- 190 浏览
添加回答
举报