Подтвердить что ты не робот

Jquery для подтверждения номера телефона

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

form.validate({

    rules: {

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

Ответ 1

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

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

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

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

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

Ответ 2

/\(?([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

Ответ 3

Ваш код:

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

Ответ 4

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/

Ответ 5

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

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

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

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

/^1?\d{10}$/

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

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

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

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

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

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

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