我已经尝试查看了很多关于如何在html5模式的正则表达式函数中使用负向lookbehind和lookahead的正则表达式指南。
我正在尝试匹配以下模式,其中字符串必须以[a-z]
字母开头和结尾。该字符串最长可达30个字符。也可以包含符号:-
,但它连续不能有多个-
。
Sooo,到目前为止我想出的是:
^[a-z][a-z(?<!-(-)?!-)]{0,28}[a-z]$
现在我无法获得前瞻和后视,所以工作正常,我不太确定我是否正确实现了最多30个字符。但是,我尝试以[a-z]
开头和结尾,它运行正常。
一些示例字符串:
'a-b' => true
'a-' => false
'-a' => false
'a--b' => false
'ab-cd' => true
'abc' => true
'a-b-c' => true
答案 0 :(得分:3)
答案 1 :(得分:2)
您需要使用
^(?!.{31})[a-z]+(?:-[a-z]+)*$
请参阅regex demo
请注意,在HTML5 模式属性中,默认情况下通常不需要锚点,因为默认情况下模式会固定在两侧。
<强>详情
^
- 字符串开头(?!.{31})
- 除了换行符之外不能有31个字符(如果匹配模式匹配,则此(?!...)
是一个未通过匹配的否定前瞻)(您也可以使用正向前瞻 - { {1}} - 字符串中需要1到30个字符)(?=.{1,30}$)
- 一个或多个小写ASCII字母[a-z]+
- 零个或多个序列:
(?:-[a-z]+)*
- 连字符-
- 一个或多个小写ASCII字母[a-z]+
- 字符串结束。