Javascript电话号码验证:没有正则表达式评估

时间:2014-03-05 19:09:11

标签: javascript regex

我有一个输入字段,要求用户填写他的电话号码,没有任何标志,只有数字。规则是:

  • 以0或3开头;
  • 仅包含数字;
  • 长度应至少为9,最多为15位;

我写了以下代码:

    if ($('#tel').val()!='') {
        var numero=$('#tel').val();
        var n = numero.length;
        var inizio= numero.charAt(0);
        var phoneno = /^\d{9,15}$/;
        if (((inizio!='3')&&(inizio!='0'))&&( !phoneno.test(numero))) {
            alert('Il numero di telefono inserito non \u00E8 valido');
            $('#tel').focus();
            error =error+1;
        }
    }

工作正常,但不会过滤数字内的字母。这有什么问题? 它似乎根本没有通过测试!

3 个答案:

答案 0 :(得分:3)

您的表达式必须使用 OR 而不是 AND

if (inizio!='3' || inizio!='0' || !phoneno.test(numero)) {

答案 1 :(得分:1)

您可以使用此正则表达式替换您的代码:

var phoneno = /^[03]\d{8,14}$/

if ( !phoneno.test(numero) ) {
        alert('Il numero di telefono inserito non \u00E8 valido');
        $('#tel').focus();
        error = error+1;
}

答案 2 :(得分:0)

由于您似乎想要一个无正则表达式解决方案(标题中没有“正则表达式评估”),因此这里不使用正则表达式。

function isValidPhone(phone) {
    var firstChar = phone[0];

    if (typeof phone !== 'string' || 
       (phone.length < 9 || phone.length > 15) ||
       !(firstChar === '0' || firstChar === '3')) return false;

    return [].every.call(phone, function (char) { return !isNaN(+char); });
}

您可以像以下一样使用它:

var tel = $('#tel').val();

if (tel && !isValidPhone(tel)) {
    //invalid phone
}