Javascript RegExp.test allways返回true

Javascript RegExp.test allways返回true,javascript,regex,Javascript,Regex,我想创建一个javascript正则表达式来测试一个字符串,该字符串只接受0到9、a到z、a到z以及以下字符:+*。总长度在1到10个字符之间 我这样做: var reg = /[0-9A-Za-z\+\*\.]{1,12}/; if(!reg.test($('#vat_id').val())) { return false; } 但这似乎不起作用 我测试了它,我可以输入$av,它返回我成功的匹配 错在哪里 编辑:正则表达式现在看起来不错: var reg = /^[0-9A-Za-z

我想创建一个javascript正则表达式来测试一个字符串,该字符串只接受0到9、a到z、a到z以及以下字符:+*。总长度在1到10个字符之间

我这样做:

var reg = /[0-9A-Za-z\+\*\.]{1,12}/;
if(!reg.test($('#vat_id').val())) {
    return false;
}
但这似乎不起作用

我测试了它,我可以输入$av,它返回我成功的匹配

错在哪里

编辑:正则表达式现在看起来不错:

var reg = /^[0-9A-Za-z\+\*\.]{1,10}$/;
但是为什么我不能让它工作呢


请参见

如果不锚定正则表达式以指示匹配应在测试字符串的开头和结尾开始,则这意味着您希望查看是否可以在字符串中的任何位置找到该模式

var reg = /^[0-9A-Za-z\+\*\.]{1,12}$/;

以^开头,以$结尾,表示整个字符串必须与模式匹配;也就是说,除了有助于匹配的字符外,字符串中不会出现任何字符。

如果不锚定正则表达式以指示匹配应在测试字符串的开头和结尾处开始,则这意味着您希望查看是否可以在字符串中的任何位置找到模式

var reg = /^[0-9A-Za-z\+\*\.]{1,12}$/;

以^开头,以$结尾,表示整个字符串必须与模式匹配;也就是说,除了有助于匹配的字符外,字符串中不显示任何字符。

您没有将其设置为匹配开始和结束:

var reg = /^[0-9A-Za-z\+\*\.]{1,10}$/;

您没有将其设置为与开始和结束匹配:

var reg = /^[0-9A-Za-z\+\*\.]{1,10}$/;

您正在匹配1到12个字符,而不是1到10个字符。您正在匹配1到12个字符,而不是1到10个字符。是的,否则示例中的av将匹配正则表达式。单击页面下方的Replace(替换)按钮,可获得$Replace(已替换),表明av部分是匹配的部分。另外,如果OP想要匹配1到10个字符,那么他不应该有{1,10}吗?@wlyles是的,如果计划匹配长度最多为10个字符的字符串,那么允许12个字符的字符串似乎是可疑的:是的,否则示例中的av匹配正则表达式。单击页面下方的Replace(替换)按钮,可获得$Replace(已替换),表明av部分是匹配的部分。另外,如果OP想要匹配1到10个字符,他不应该有{1,10}吗?@wlyles是的,如果计划匹配长度最多为10个字符的字符串,那么允许12个字符的字符串似乎是可疑的: