我有一个jQuery验证正则表达式,用于检查是否包含短语:
$.validator.addMethod("regex", function(value, element, regexp) {
return this.optional(element) || regexp.test(value);
}, "You must include the required keyword phrase(s).");
如果我要检查多个短语,我将其添加:
$("#text").rules("add", { regex: /phrase one/i });
$("#text").rules("add", { regex: /another phrase/i });
$("#text").rules("add", { regex: /test phrase/i });
我遇到的问题是它只检查最后一个短语规则,这意味着如果包含“测试短语”,但其他规则不包含,则会接受它。我需要检查以确保包含所有短语。
我还希望错误消息能够包含缺少的阶段,例如,如果缺少“另一个短语”,则错误将是:
您必须包含所需的词组:另一个词组
THX
答案 0 :(得分:1)
您应该创建一个特定于需求的方法,而不是使用通用正则表达式:
var vInstance = $("form").validator(/* options */);
$.validator.addMethod("multiPhrases", function (value, element, phrases) {
var missingPhrase, errObject = {};
// Check for all the phrases
for (var i = 0; i < phrases.length; i++) {
if (value.toLowerCase().indexOf(phrases[i].toLowerCase()) < 0) {
// Phrase not found
missingPhrase = phrases[i];
break;
}
}
// Show the error yourself
if (missingPhrase) {
errObject[$(element).attr("name")] =
"You must include the required phrase: " +
missingPhrase;
vInstance.showErrors(errObject);
}
// Tell the plugin if there was an error
return (missingPhrase == false);
});
这要求您的输入具有name属性,并且您需要在创建时保存对验证器对象(vInstance
)的引用。在查看jQuery验证器的API之后,这是我能想到的最好的黑客攻击。 IMO,一个不错的验证插件应该允许您从自定义函数返回自定义错误消息...
像这样使用它:
$("#text").rules("add", {multiPhrases: [
"phrase one",
"another phrase",
"test phrase"
]});
答案 1 :(得分:0)
我使用了Box9的答案,并解决了他的问题,Ricky正在用“警告:未定义消息......”覆盖该消息。 因此,完整且有效的解决方案将是:
引用专栏9:
您应该创建一个特定于需求的方法,而不是使用通用正则表达式:
$("form").validator(/* options */);
$.validator.addMethod("multiPhrases", function (value, element, phrases) {
var missingPhrase, errObject = {};
// Check for all the phrases
for (var i = 0; i < phrases.length; i++) {
if (value.toLowerCase().indexOf(phrases[i].toLowerCase()) < 0) {
// Phrase not found
missingPhrase = phrases[i];
break;
}
}
// Set the message as default for this validation
if (missingPhrase) {
errObject["multiPhrases"] =
"You must include the required phrase: " + missingPhrase;
jQuery.extend(jQuery.validator.messages, errObject);
}
// Tell the plugin if there was an error
return (missingPhrase == false);
});
而不是像Box9最初使用showErrors()那样自己显示错误,你必须将它设置为此验证的默认消息,因为jQuery.validation插件无论如何都会查找默认值,并覆盖之前显示的任何错误这个元素。
再次引用Box9:
这要求您的输入具有名称属性。
像这样使用它:
$("#text").rules("add", {multiPhrases: [
"phrase one",
"another phrase",
"test phrase"
]});