我试图在javascript中使用常规尝试,但它无法正常工作。我的自定义控件包含由用户提供的名为RegEx的属性,我需要根据此正则表达式验证输入值。由于JS中的属性将使用双引号(“”),因此regualr表达式失败(case -1)。案例2成功地认为案例regualr表达式是相同的,唯一的区别是case-1它是双引号。谁能告诉我为什么它不起作用。 RegexExp =“/ ^ \ d {5} $ /” - 在我的aspx页面
var value = "11111";
if(value.toString().search($(element).attr('RegexExp')) != -1)
{
return true;
}
else
{
return false;
}
var reg = /^\d{5}$/;
if(value.toString().search(reg) != -1)
{
return true;
}
else
{
return false;
}
答案 0 :(得分:2)
请改为:
var reg = new RegExp($(element).attr('RegexExp'));
更新:您还需要删除/字符,因为这些不应该提供给RegExp构造函数:
var regexExp = $(element).attr('RegexExp');
var reg = new RegExp(regexExp.substring(1, regexExp.length - 1));
答案 1 :(得分:2)
我假设您发布的代码是return语句中函数的一部分,但如果不是,则第一个问题是return
不允许在函数一侧使用。
无论如何,请尝试以下方法。您可以使用其正式构造函数
从字符串创建RegExpvalue.search(new RegExp($(element).attr('RegexExp')));
此外,您不需要对值使用toString()
,因为它已经是一个字符串,并且您的代码不必要地冗长。以下内容相当于您的第一个if else
声明
return value.search(new RegExp($(element).attr('RegexExp'))) != -1;
修改强>
如果您希望能够将表达式传递为“/ [expression] /”或“/ [expression] / gi”,则可以执行以下操作:
var toRegExp = function(regexString) {
var expression = regexString.substr(1), // remove first '/'
closingSlash = expression.lastIndexOf("/"); // find last '/'
return new RegExp(
// Expression: remove everything after last '/'
expression.substr(0, closingSlash),
// Flags: get everything after the last '/'
expression.substr(closingSlash+1)
);
}
....
value.search( toRegExp($(element).attr('RegexExp')) );
答案 2 :(得分:0)
首先,不使用自定义属性来保存正则表达式。其次,“RegexExp”是多余的 - 就像说“正则表达式”。第三,要从String转换为RegExp,必须用new RegExp()
包装字符串; JavaScript并不是弱类型的。也就是说,假设正则表达式没有设置为服务器端,我建议使用jQuery's data API。它具有额外的优势,它可以直接存储正则表达式对象。
设置:
jQuery.data($(element).get(0), "regexp", /^\d{5}$/);
获得:
jQuery.data($(element).get(0), "regexp");
但最终,你真正想要的是jQuery Validation plugin。它完成了你需要的一切,然后是一些。顺便说一下,它在内部使用数据API来发挥它的魔力。
答案 3 :(得分:0)
/.../语法用于在Javascript中声明正则表达式对象,因此您不应该使用它来指定正则表达式模式,它应该只是regexp="^\d{5}$"
作为属性。
搜索方法将正则表达式对象作为参数,因此您必须根据从属性中获取的字符串创建正则表达式对象:
var reg = new RegExp($(element).attr('regexp'));
if (value.toString().search(reg) != -1) {
(你看到与你的第二个案件相似吗?)
或者作为单个表达式:
if (value.toString().search(new RegExp($(element).attr('regexp'))) != -1) {