我正在尝试创建自定义jquery验证规则,以对文本框上的值执行正则表达式。这是规则:
$.validator.addMethod("validateRegExp", function (value, element, pattern) {
console.debug("pattern: " + pattern);
var regex = new RegExp(pattern);
var isMatch = regex.test(value);
console.debug("value: " + value);
console.debug("result: " + isMatch);
return isMatch;
});
这是html:
<input type="text" class="{ "validateRegExp": "^\d{1,2}:\d{2}(\s)*(AM|am|PM|pm)$", messages: { "validateRegExp": "Invalid Time" } }" maxlength="8" value="8:00 AM" name="TuesdayStartTime" id="TuesdayStartTime" />
出于某种原因,当它调用自定义validateRegExp方法时,pattern属性设置为:
^ d {1,2}:d {2}(S)*(AM | AM | PM |时)$
如您所见,反斜杠已被删除。我甚至可以放入2或3个反斜杠,每个应该去,当它进入这个方法时,所有反斜杠都被过滤掉了。我如何使这个工作?
答案 0 :(得分:0)
您似乎试图在双引号内使用双引号。将一些更改为单引号。 e.g。
<input type="text"
class="{ validateRegExp: '^\d{1,2}:\d{2}(\s)*(AM|am|PM|pm)$',
messages: { validateRegExp: 'Invalid Time' }
}"
maxlength="8"
value="8:00 AM"
name="TuesdayStartTime"
id="TuesdayStartTime" />
不确定这是否会有所帮助(我之前从未见过以这种方式指定的类),但它不会让它变得更糟。
答案 1 :(得分:0)
答案是为正则表达式中我想要的每个1添加4个反斜杠,因为它会被解析两次,一次是以编程方式创建的,其次是jquery.metadata。
title.append($("<div class='section'><input id='" + id + "_EndTime' name='" + id + ".EndTime' value='" +
(day.EndTime ? day.EndTime : "") + "' type='text' maxlength='8' " +
utils.addValidationRuleHtml("validateRegExp", "^\\\\d{1,2}:\\\\d{2}(\\\\s)*(AM|am|PM|pm)$", "Invalid Time") + " /></div>"));