2010-12-09 2 views
1

У меня есть регулярное выражение проверки JQuery, который проверяет, является ли фраза (ы) включены: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 }); 

проблема у меня в том, что он проверяет только последнее правило фразы, что означает, если «тест фраза» включена, а другие нет, он будет принимать его. Мне нужно его проверить, чтобы убедиться, что все фразы включены.

Я хотел бы также, как сообщение об ошибке, чтобы иметь возможность включать фазу, отсутствующий, пример, если «другая фраза» отсутствует, то ошибка будет:

You must include the required phrase: another phrase

Thx

ответ

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); 
}); 

Это требует ввода иметь имя атрибут, и вам нужно сохранить ссылку на го e validator object (vInstance), когда он создан. Это лучший хак, который я могу придумать, посмотрев API-интерфейс jQuery validator. ИМО, достойный плагин проверки должен позволить вам вернуть сообщение об ошибке из пользовательской функции ...

Используйте его так:

$("#text").rules("add", {multiPhrases: [ 
    "phrase one", 
    "another phrase", 
    "test phrase" 
]}); 
+0

Я думаю, я попробую, так как нет лучших ответов. Спасибо – Ricky 2010-12-09 18:24:09

0

Я использовал Box9 ответ, и исправили проблему его и Рики были имея о сообщении переписывается с «Внимание: никакое сообщение не определено для ...» Так полный и рабочий раствор будет таким:

Цитирование Box9:

Вы должны сделать метод, специфичный к требованию , А не идти на родовом регулярное выражение:

$("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" 
]}); 

Спасибо Box9 и Ricky для первоначального размещения этого, как он помог мне найти решение.

Смежные вопросы