it-swarm.com.ru

jQuery для проверки номера телефона

Я хочу проверить телефонные номера, такие как (123) 456-7890 или 1234567890 Как должно быть записано условие «совпадения» в следующем коде?

form.validate({

    rules: {

       phoneNumber: {matches:"[0-9]+",minlength:10, maxlength:10}
17
FlintOff

Ваше регулярное выражение должно быть что-то вроде

[0-9\-\(\)\s]+

Это соответствует числам, тире, круглым скобкам и пробелу.

Если вам нужно что-то более строгое, соответствующее вашему примеру, попробуйте это:

([0-9]{10})|(\([0-9]{3}\)\s+[0-9]{3}\-[0-9]{4})

22
Binary Brain

Ваш код:

rules: {
    phoneNumber: {
        matches: "[0-9]+",  // <-- no such method called "matches"!
        minlength:10,
        maxlength:10
    }
}

Нет такой функции обратного вызова, опция, метод или правило, которое называется matches где-либо в плагин jQuery Validate . (EDIT: OP не упомянул, что matches - его пользовательский метод.)

Однако в файле additional-methods.js можно использовать несколько методов проверки телефонных номеров. Тот, который называется phoneUS, должен соответствовать вашему шаблону. Поскольку правило уже проверяет длину, minlength и maxlength излишне не нужны. Это также намного более полно в том, что коды регионов и префиксы не могут начинаться с 1.

rules: {
    phoneNumber: {
        phoneUS: true
    }
}

DEMO: http://jsfiddle.net/eWhkv/


Если по какой-либо причине вам просто нужно регулярное выражение для использования в другом методе, вы можете взять его отсюда ...

jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
    phone_number = phone_number.replace(/\s+/g, "");
    return this.optional(element) || phone_number.length > 9 && 
    phone_number.match(/^(\+?1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
}, "Please specify a valid phone number");
19
Sparky
/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/

Поддерживает:

  • (123) 456 7899
  • (123) .456.7899
  • (123) -456-7899
  • 123-456-7899
  • 123 456 7899
  • 1234567899
15
user2957312
function validatePhone(txtPhone) {
    var a = document.getElementById(txtPhone).value;
    var filter = /^((\+[1-9]{1,4}[ \-]*)|(\([0-9]{2,3}\)[ \-]*)|([0-9]{2,4})[ \-]*)*?[0-9]{3,4}?[ \-]*[0-9]{3,4}?$/;
    if (filter.test(a)) {
        return true;
    }
    else {
        return false;
    }
}

Демоhttp://jsfiddle.net/dishantd/JLJMW/496/

11
Dishan TD

Если вы сначала нормализуете свои данные, то сможете избежать всех очень сложных регулярных выражений, необходимых для проверки телефонных номеров. Исходя из моего опыта, сложные шаблоны регулярных выражений могут иметь два нежелательных побочных эффекта: (1) они могут иметь неожиданное поведение, которое позже будет затруднительно для отладки, и (2) они могут быть медленнее, чем простые шаблоны регулярных выражений, которые могут стать заметными, когда вы выполняем регулярное выражение в цикле.

Делая ваши регулярные выражения как можно более простыми, вы уменьшаете эти риски, и другим будет легче следовать вашему коду, отчасти потому, что он будет более предсказуемым. Чтобы использовать пример вашего телефонного номера, сначала мы можем нормализовать значение, удалив все не цифры, как это:

value = $.trim(value).replace(/\D/g, '');

Теперь ваш шаблон регулярного выражения для номера телефона в США (или любой другой локали) может быть намного проще:

/^1?\d{10}$/

Регулярное выражение не только намного проще, но и легче следить за тем, что происходит: значение, необязательно ведущее с номером один (код страны США), за которым следуют десять цифр. Если вы хотите отформатировать проверенное значение, чтобы оно выглядело симпатично, вы можете использовать этот более длинный шаблон регулярных выражений:

/^1?(\d{3})(\d{3})(\d{4})$/

Это означает необязательный начальный номер один, за которым следуют три цифры, еще три цифры и заканчивающиеся четырьмя цифрами. Запомнив каждую группу чисел, вы можете вывести ее любым удобным для вас способом. Вот кодовая ручка, использующая jQuery Validation, чтобы проиллюстрировать это для двух локалей (Сингапур и США):

http://codepen.io/thdoan/pen/MaMqvZ

4
thdoan
jQuery.validator.methods.matches = function( value, element, params ) {
    var re = new RegExp(params);
    // window.console.log(re);
    // window.console.log(value);
    // window.console.log(re.test( value ));
    return this.optional( element ) || re.test( value );
}

rules: {
        input_telf: {
            required  : true,
            matches   : "^(\\d|\\s)+$",
            minlength : 10,
            maxlength : 20
        }
    }
2
Alfredo González Portero

Я знаю, что это старый пост, но я думал, что поделюсь своим решением, чтобы помочь другим.

Эта функция будет работать, если вы хотите, чтобы действительный 10-значный номер телефона "номер США"

function getValidNumber(value)
{
    value = $.trim(value).replace(/\D/g, '');

    if (value.substring(0, 1) == '1') {
        value = value.substring(1);
    }

    if (value.length == 10) {

        return value;
    }

    return false;
}

Вот как использовать этот метод

var num = getValidNumber('(123) 456-7890');
if(num !== false){
     alert('The valid number is: ' + num);
} else {
     alert('The number you passed is not a valid US phone number');
}
1
Mike A

Это работа для меня: -

/^\(?(\d{3})\)?[-\. ]?(\d{3})[-\. ]?(\d{4})$/
1
vineet