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

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

form.validate({

    rules: {

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

9 ответов


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

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

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

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

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


код:

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

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

внутри the есть несколько методов проверки номера телефона вы можете использовать. Тот, которого звали phoneUS следует удовлетворить ваш шаблон. Поскольку правило уже проверяет длину, minlength и maxlength избыточно лишними. Это также намного более полно в том, что коды областей и префиксы не могут начинаться с 1.
rules: {
    phoneNumber: {
        phoneUS: true
    }
}

демо: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");

/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})([0-9]{4})/

поддержка :

  • (123) 456 7899
  • (123).456.7899
  • (123)-456-7899
  • 123-456-7899
  • 123 456 7899
  • 1234567899

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/


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

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

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

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

/^1?\d{10}$/

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

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

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

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


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

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

эта функция будет работать, если вы хотите, чтобы действительный 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');
}

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

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

вы знаете, что в этом мире есть много форматов номеров телефонов, поэтому вы можете использовать это регулярное выражение для проверки любого номера телефона ^[0-9-+s()]*$