Javascript电话号码验证Paratheses标志
我做了一些搜索,并在那里其他人问这个问题和答案,但没有一个似乎符合我想要做的。基本上我正在验证接受(123)4567890作为条目的电话条目。我已经实现了一个接受一个简单的数字字符串,如1234567890和一个破折号123-456-7890。我知道我正在犯一个简单的错误,但我无法弄清楚我做错了什么。Javascript电话号码验证Paratheses标志
下面是用虚线形式的电话号码是工作:
//Validates phone number with dashes.
function isTwelveAndDashes(phone) {
if (phone.length != 12) return false;
var pass = true;
for (var i = 0; i < phone.length; i++) {
var c = phone.charAt(i);
if (i == 3 || i == 7) {
if (c != '-') {
pass = false;
}
}
else {
if (!isDigit(c)) {
pass = false;
}
}
}
return pass;
}
,这是一个我无法管理打工了。
function isTwelveAndPara(phone) {
if (phone.length != 12) return false;
var pass = true;
for (var i = 0; i < phone.length; i++) {
var c = phone.charAt(i);
if (i == 0) {
if (c != '(') {
pass = false;
}
}
if (i == 4) {
if (c != ')') {
pass = false;
}
}
else {
if (!isDigit(c)) {
pass = false;
}
}
}
return pass;
}
您可以regex
很容易做到这一点:
return !!phone.match(/\(\d{3}\)\d{7}/g)
更新:
的代码你有没有工作,因为你忘else if
:
else if (i == 4) { // Added the "else" on the left.
gdoron指的是正则表达式。他的回答补充:查看Mozilla的[RegExp文档](https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions)或[自己尝试](http://www.regular-expressions.info /javascriptexample.html)。 – briangonzalez
我在回答类似问题时看到过这个例子。我不怀疑它的工作原理(事实上它比我所展示的编程更好),但为了练习的目的,我需要保持isTwelveAndDashes(phone)函数的类似风格。 –
@JoshuaAslanSmith。好。请参阅更新。 – gdoron
类似的东西(RegExp规则)可以确保它匹配任一规则。
var numbers = ['(1234567890','(123)4567890','123-456-7890','1234567890','12345678901'];
var rule = /^(\(\d{3}\)\d{7}|\d{3}-\d{3}-\d{4}|\d{10})$/;
for (var i = 0; i < numbers.length; i++) {
var passed = rule.test(numbers[i].replace(/\s/g,''));
console.log(numbers[i] + '\t-->\t' + (passed ? 'passed' : 'failed'));
}
编辑:用正则表达式
function isDigit(num) {
return !isNaN(parseInt(num))
}
function isTwelveAndPara(phone) {
if (phone.length != 12) return false;
for (var i = 0; i < phone.length; i++) {
var c = phone.charAt(i);
if (i == 0) {
if (c != '(') return false;
} else if (i == 4) {
if (c != ')') return false;
} else if (!isDigit(c)) return false;
}
return true;
}
// or...
function isTwelveAndPara(phone) {
if (phone.length != 12 || phone.charAt(0) != '(' || phone.charAt(4) != ')') return false;
for (var i = 1; i < phone.length, i != 4; i++) {
if (!isDigit(phone.charAt(i))) return false;
}
return true;
}
我见过这个例子来回答类似的问题。我不怀疑它的工作原理(事实上它比我所展示的编程更好),但为了练习的目的,我需要保持isTwelveAndDashes(phone)函数的类似风格。 –
谢谢。我知道这是一件令人难以置信的简单而愚蠢的事情。 –
没问题。我写了一个替代你的功能,这是短得多,以防万一...... – inhan
检查电话号码是肯定要走的路。下面是验证 功能,忽略空格,括号和破折号:
check_phone(num) {
return num.replace(/[\s\-\(\)]/g,'').match(/^\+?\d{6,10}$/) != null}
你可以改变的位数与第二正则表达式{6,10}
的范围内接受。允许带领+
。
以下是验证电话号码的方法:**请勿**如果您的用户在海外,该怎么办?如果他们有扩展名会怎么样?您通过验证获得的好处通常会通过关闭您不想关闭的门来消除。 (并且没有验证将确保您获得一个*有效的*电话号码;任何验证规则都可能被一个真实的虚假号码愚弄。) –
澄清这不是用于商业网站,而是我的教育的一部分。我期待看到我做错了什么。我知道它与(和)字符的if语句,但我不确定将它们两者都加入if(&&)语句的正确语法。 –
@ T.J.Crowder。你忘了提到应该用'regex'完成字符串模式检查... +1 – gdoron