Проверка Jquery с регулярным выражением SSN, маскированным вводом и зависимостями - PullRequest
2 голосов
/ 07 октября 2011

У меня проблемы с настройкой Jquery Validation для работы со следующими правилами.

У меня есть поле, замаскированное в формате SSN, проверка не должна разрешать отправку этой информации, если она не является полной SSN.У меня есть рабочая функция регулярных выражений, которая отклоняет не SSN.Мне это нужно, чтобы не допустить пустых представлений (маска применяется только в том случае, если поле - onFocus).И последнее, но не менее важное: поле НЕ требуется, если установлен другой флажок (#noSSN).

Я добавил страницу JSfiddle, чтобы помочь: http://jsfiddle.net/B2UpW/3/

Похоже, чтоработать немного по-другому на странице скрипки.Надеюсь, что это поможет!

Редактировать: я еще не получил никаких ответов ... интересно, есть ли какие-либо сомнения по поводу моего вопроса?Любые предложения, которые помогут найти помощь, приветствуются!

$("#ssn").mask("999-99-9999");

$.validator.addMethod("notEqual", function(value, element, param) {
  return this.optional(element) || value !== param;
}, "Please choose a value!");           

$("#applicantForm").validate({
    rules: {        
        ssn: {
            notEqual: "___-__-____", 
            required: {
                depends: function(element) {
                    return ($("#ssn").val() == ""
                            || isValidSSN($("#ssn").val()) 
                            || $("#noSSN:unchecked"));
                }                   
            }                   

        }
    },
    messages: {
        ssn: 'Please enter a social security number.'
    }
});


function isValidSSN(value) { 
    var re = /^([0-6]\d{2}|7[0-6]\d|77[0-2])([ \-]?)(\d{2})\2(\d{4})$/; 
    if (!re.test(value)) { return false; } 
    var temp = value; 
    if (value.indexOf("-") != -1) { temp = (value.split("-")).join(""); } 
    if (value.indexOf(" ") != -1) { temp = (value.split(" ")).join(""); } 
    if (temp.substring(0, 3) == "000") { return false; } 
    if (temp.substring(3, 5) == "00") { return false; } 
    if (temp.substring(5, 9) == "0000") { return false; } 
    return true; 
}

Ответы [ 3 ]

4 голосов
/ 21 сентября 2014

Владельцы сайтов, пожалуйста, прекратите использовать кусок кода из jammypeach или Stephen S. выше.Некоторые действительные номера SSN отклоняются их регулярным выражением.

См. http://www.socialsecurity.gov/employer/randomization.html

Ранее для номеров были введены ранее неназначенные номера областей

SSN могут начинаться с "773 "и выше с июня 2011 года, до создания этой темы.

Пожалуйста, замените ([0-6]\d{2}|7[0-6]\d|77[0-2]) на \d{3} - теперь я должен идти лично в банк из-за вас; -)

2 голосов
/ 09 ноября 2011

Вам просто нужно было добавить проверку, чтобы проверить, установлен ли флажок.

См. эту обновленную скрипку , вокруг строки 9 (или строки 2 в коде ниже), где вы проверяете, действителен ли SSN:

$('#submitApplication').live('click', function() {
    if ($('#noneSSN').is(':checked'))
    {
        alert("SUCCESS");
    }
    else
    {
        var isValid = $("#applicantForm").valid();
        if (isValid) {
            alert("SUCCESS");
        }
    }
    return false;
});

Теперь разрешить отправку, если флажок установлен, в противном случае потребуется правильный SSN.

0 голосов
/ 09 ноября 2011

Не очень понятно, что именно не работает ...

В любом случае я вижу несколько вещей:

  1. Что такое notEqual?Это метод, который вы добавили?Существует метод, называемый pattern, в скрипте дополнительные методы , предлагаемый вместе с плагином.

  2. Какова цель вашего depends?Добавьте правило required, чтобы проверить, что значение не пустое, и добавьте правило, подобное isValidSSN: true, для выполнения собственной проверки SSN.

  3. используйте только depends (или * 1023).*) применять правила, когда флажок не установлен.

Надеюсь, это поможет, д.

...