JavaScript RegExp错误

时间:2012-03-05 19:10:50

标签: javascript jquery regex

我有以下功能:

   function checkRegexp(o, regexp, n) {

            if (!(regexp.test(o.val()))) {                   
                return false;
            } else {
                return true;
            }
        }

此代码正确验证电子邮件地址:

 checkRegexp(email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "incorrect email ");

这应该检查数字:

checkRegexp(numberId, "^[0-9]", "enter only number");

但是我收到了这个错误:regexp.test is not a function

8 个答案:

答案 0 :(得分:5)

你传递的是字符串,而不是正则表达式,它应该是

checkRegexp(numberID, /^[0-9]/, "enter only number");

没有/,JS无法知道你希望它是一个正则表达式。

答案 1 :(得分:2)

您传入的是字符串而不是正则表达式。

尝试:

checkRegexp(numberId, /^[0-9]/, "eneter only number");

答案 2 :(得分:2)

首先,你传递了一个字符串,而不是正则表达式:

"^[0-9]"  // string
/^[0-9]/  // regexp

其次,我猜您的意思是^[0-9]+$,例如"1a"现在会通过,这不仅仅是一个数字。

答案 3 :(得分:2)

正则表达式是最慢的 Cached regex are actually faster than this solution。但是,我将它留在这里供参考:-)。要测试它是否为数字,您可以使用此功能:

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

来源:https://stackoverflow.com/a/1830844/851498

P.S:其他答案会告诉你为什么你的代码错了,我更愿意向你展示更好的解决方案。

答案 4 :(得分:1)

由正斜杠(/^[0-9]/)分隔的东西是一个RegExp对象。 "^[0-9]"只是一个字符串,您无法调用.test()

请改为尝试:

checkRegexp(numberId, /^[0-9]/, "enter only numbers");

,如果您想确保numberId仅包含数字,您实际需要:

checkRegexp(numberId, /^[0-9]+$/, "enter only numbers");

基本上,请确保在值的开头[0-9]+和结束^之间只有一个或多个数字$

答案 5 :(得分:0)

您输入的是String而不是Regexp。 这将有效:

checkRegexp(numberId, /^[0-9]/, "eneter only number");

答案 6 :(得分:0)

您在最后一句中使用双引号。

试试这个:

checkRegexp(numberId, /^[0-9]/, "eneter only number");

答案 7 :(得分:0)

您遗失/ /或使用new RegExp("^[0-9]")。它必须是RegExp对象才能调用.test函数

更改如下,

checkRegexp(numberId, /^[0-9]/, "eneter only number");