我有以下正则表达式:
var legal = /[a-zA-Z0-9\._\-]+/;
应该定义唯一的有效字符串是由[]
内的字符组成的字符串,重复正数次。
所以,以下工作正常:
legal.test("a"); // => true
legal.test("/"); // => false
然而,这不起作用:
legal.test("a/"); // => true
应该是假的。我尝试在ReGeX的末尾添加一个$
来表示行尾,这有帮助,但并非总是如此:
var legal2 = /[a-zA-Z0-9\._\-]+$/;
legal2.test("a"); // => true
legal2.test("a/"); // => false
legal2.test("a/a"); // => true
最后一个应该是false
,因此$
最终并不总是有帮助。
我需要对我的正则表达式做些什么才能让它像一个"模板"要验证哪些字符串?
答案 0 :(得分:4)
您需要在前面用插入符号(^
)指示字符串匹配的开头:
^[a-zA-Z0-9\._\-]+$
现在只匹配仅包含允许字符的字符串。
您的模式[a-zA-Z0-9\._\-]+$
与a
的最后a/a
匹配,因为您没有严格提及从哪里开始匹配,但您确实将结束条件强加给$
。