我正在学习Javascript中的常规表达,并且有一件我不理解的事情。
以下正则表达式应匹配a到z中的任何字符串,但如果我添加一个数字则表示正确
var patron = /[a-zA-Z]/;
var regex = new RegExp(patron);
var v= "hello word 512";
if(v.match(regex))
{
//should not match but it does
}else
{
objInput.style.color = "red";
}
他们试过这个:
var patron = /[a-zA-Z\D]/;
var regex = new RegExp(patron);
var v= "hello word 512";
if(v.match(regex))
{
//should not match but still dont work
}else
{
objInput.style.color = "red";
}
而且,括号不匹配
var patron = /[a-zA-Z\"\']/;
var regex = new RegExp(patron);
var v= "hello word 512";
if(v.match(regex))
{
//it match whenever the double quoute it followed by the single quoute'
}else
{
objInput.style.color = "red";
}
答案 0 :(得分:3)
关于您提供的第一个示例,您的正则表达式/[a-zA-Z]/
会检查输入字符串中的任何字符。由于它在输入字符串中找到h
,因此返回true。
您需要做的是在正则表达式中放置开始和结束锚点^
和$
。新的正则表达式看起来像这样:
/^[a-zA-Z]+$/
您可以相应地对所有正则表达式进行更改。
要匹配括号,您需要使用反斜杠转义它们。 \(
与(
匹配,\)
与)
匹配。
答案 1 :(得分:2)
您应该匹配整个字符串,使用 ^ (匹配字符串的开头)和 $ (匹配结尾字符串)运算符,例如:
/^[a-zA-Z\s]+$/.test("any string followed by numbers! 555") // will return false
除了字符串中的a-z
字符和空格外,这不允许任何其他内容。
答案 2 :(得分:0)
匹配函数在您的情况下寻求至少一个匹配,这是第一个符号,它是一个字符。 如果你只想要字符然后使用/[a-zA-Z]/.test("your string“)