如何用JavaScript验证电话号码?

6

需要比我聪明的人能否帮助我解决这个函数?它的目的是验证表单中文本输入的电话号码字段,只接受0-9、破折号和点。HTML调用该函数没有问题。

function validateFeedback() {
    var phone = document.getElementById("phone");
    var validNumber = "0123456789.-";
    for (i = 0; i < phone.length; i++); {
        if (validNumber.indexOf(phone.charAt(i)) == -1); {
            alert("You have entered an invalid phone number");
            return false;
        }
    }
    return true;
}

非常感谢您的帮助。
谢谢。

你在for和if块中使用了分号(第4行和第5行)...如果这是一个打字错误,你可能需要进行编辑,否则这可能是你的问题。 - optimusprime619
7个回答

9

正则表达式应该有帮助 ;)

很抱歉我还没有尝试运行这段代码,但它应该没问题。

function validateFeedback(){
    var phone = document.getElementById("phone");
    var RE = /^[\d\.\-]+$/;
    if(!RE.test(phone.value))
    {
        alert("You have entered an invalid phone number");
        return false;
    }
    return true;
}

谢谢大家的建议!这比我深夜写的代码好多了。再次感谢你们! - user1395909

2

尝试像这样:

function validateFeedback()
    {
    var phone = document.getElementById("phone");
    var validNumber = "0123456789.-";


    for(i = 0; i < phone.length; i++) {
            if(validNumber.indexOf(phone.charAt(i)) == -1) {
                    alert("You have entered an invalid phone number");
                    return false;
                }
            }

        return true;
    }

;错放位置...


嗯,那并没有解决它(虽然感谢指出)。我想if或for语句中有一些缺陷。有什么想法吗?编辑:我原本想在原帖中写出函数的目的,现在我会添加它。 - user1395909

1

试试这个

function validateFeedback(value) {
    var length = value.length;
    chk1="1234567890()-+ ";
    for(i=0;i<length;i++) {
        ch1=value.charAt(i);
        rtn1=chk1.indexOf(ch1);
        if(rtn1==-1)
            return false;
        }
        return true;
    }

1

我认为你应该使用正则表达式来完成这个任务。类似这样:

function validateFeedback() {
  var phone = document.getElementById("phone").value;
  var reg = new RegExp("[0-9 .-]*"); 

  return reg.test(phone);
}

这并不会真正起作用,因为它将接受基本上任何字符,甚至是空字符串。 - Jiří Herník

1
如果文本输入是在表单中,您可以更直接地使用表单 ID 和元素 ID 进行引用:
var phone = document.<formId>.phone;

您想要测试的是元素的值,因此您需要:
var phone = document.<formName>.phone.value;

由于该函数可能是从表单的提交监听器中调用的,因此您可以使用以下方法使其更有效:

<form onsubmit="return validateFeedback(this);" ...>

在我看来,电话号码只包含数字,不包括“-”或“.”字符,因此您应该仅测试0-9的数字。

因此,函数可以如下:

function validateFeedback(form) {
  var phoneValue = form.phone.value;

  // Use a regular expression to validate the value
  // is only digits
  if (/\D/.test(phoneValue) {
    // value contains non-digit characters
    // advise user of error then
    return false;
  }
}

您可能还想测试长度是否合理,但请注意,不同地方的电话号码长度是不同的,这取决于区域或国家代码的位置和使用,以及该号码是移动电话、座机还是其他类型。


1
我更喜欢使用正则表达式来处理这种情况。请看一下我修改后的函数版本,它应该可以在所有主流浏览器中运行,而无需任何框架。
function validateFeedback() {
    // Get input
    var phone = document.getElementById("phone"),
        // Remove whitespaces from input start and end
        phone = (phone || '').replace(/^\s+|\s+$/g, ''),
        // Defined valid charset as regular expression
        validNumber = "/^[0123456789.-]+$/";

    // Just in case the input was empty
    if (phone.length == 0) {
        // This depends on your application - is an empty number also correct?
        // If not, just change this to "return false;"
        return true;
    }

    // Test phone string against the regular expression
    if (phone.match(validNumber)) {
        return true;
    }

    // Some invalid symbols are used
    return false;
}

1
function phonenumber(inputtxt)
{
  var phoneno = /^\d{10}$/;
  if((inputtxt.value.match(phoneno))
        {
      return true;
        }
      else
        {
        alert("message");
        return false;
        }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接