这里有同样的问题: How to pass a regular expression as a function parameter,但我仍然无法让它发挥作用。
这是我用来测试电子邮件的正则表达式的字符串表达式:
var regexp="^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$";
如果我把它放到firebug上就像这样执行:
/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$"/.test("test@domain.com")
它会给出我想要的东西,但如果把它作为参数传递给函数:
function bool validate(var value, var regexp){
//escape special characters
regexp=String(regexp).replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').replace(/\x08/g, '\\x08');
return new RegExp(regexp,'g').test(value)
}
像这样:
validate("test@domain.com",regexp);
这会让我失意。请说明我犯了什么错误,谢谢。
更新: 对不起,正如@Bhojendra - C-Link尼泊尔所说,将gwt的jsni代码翻译成这个时输入错误,正确的代码应该是:
function validate(value, regexp){
//escape special characters
var regexp = regexp.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').replace(/\x08/g, '\\x08');
return new RegExp(regexp,'g').test(value);
}
但它仍然无法正常工作。
答案 0 :(得分:2)
替换此行:
function bool validate(var value, var regexp){
有了这个:
function validate(value, regexp){
经过一些修改和拼写错误修复后,这里是代码:
function validate(value, regexp){
//escape special characters
var regexp = regexp.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').replace(/\x08/g, '\\x08');
return new RegExp(regexp,'g').test(value);
}