我有以下功能:
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
答案 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");