所有
我想要做的是使用Regex匹配只允许[A-Za-z0-9_-]的字符串,格式应为:
仅以[A-Za-z0-9]开头,然后是[A-Za-z0-9_-]。中间可能有[_-],但如果有,则只允许一次(_和 - 都可以存在,但每个只有一次机会),并以[A-Za-z0-9结束] ]
我只知道如何匹配字母数字字符,破折号和下划线,但不知道如何限制它们的出现时间。
由于
答案 0 :(得分:3)
您可以使用否定前瞻:
^(?!.*(-[^-]*-|_[^_]*_))[A-Za-z0-9][\w-]*[A-Za-z0-9]$
^
- 直线开始(?!.*(-[^-]*-|_[^_]*_))
- 如果前面有2个下划线或2个连字符,那么否定前瞻意味着匹配失败[A-Za-z0-9]
- 匹配1个字母数字字符[\w-]*
- 匹配0个[A-Za-z0-9_-]
个字符$
- 匹配行结束