我的目的是找到一个函数,检查字符串是否以小写字母开头,以小写字母结尾,可能只包含一个或不包含连字符-
,并且小于或等于到32个字符。
以下是我的代码:
var ss = /^[a-z]+([A-Za-z0-9_]|(-?)|[a-z]+$){1,31}/;
str="ss-fjdkkldjkskjdskjdksjdkjdkjklskssdkdkffdkdfkdfk";
ss.test(str);
测试字符串 结果是真的 aJDS-a a234bds aHJH878sjkJSK-ja
我的功能目前正在返回true
,但与我的要求不符。
如果测试字符串与reg要求匹配,则结果应返回true。
我不知道为什么。
答案 0 :(得分:1)
请注意,JS regex中的[A-Za-z0-9_]
等于\w
。所以,这里有几个解决方案:
str.length > 0 && str.length <= 32
)检查整个字符串的长度,或者在下面的正则表达式建议中使用(?=.{1,32}$)
字符串开头锚点后使用^
正向前瞻-
的字符串时匹配,请使用这样的可选非捕获组 - ^[a-z]\w*(?:-\w*[a-z])?$
(=&gt; ^(?=.{1,31}$)[a-z]\w*(?:-\w*[a-z])?$
)< / LI>
?
量词:^[a-z]\w*(?:-?\w*[a-z])?$
(=&gt; ^(?=.{1,31}$)[a-z]\w*(?:-?\w*[a-z])?$
)-
的字符串,请使用^[a-z](?:[-\w]*[a-z])?$
(=&gt; ^(?=.{1,31}$)[a-z](?:[-\w]*[a-z])?$
)。