Javascript Phone number validation Paratheses sign
我进行了一些搜索,然后其他人问了这个问题和答案,但似乎没有一个适合我的尝试。基本上,我正在对接受(123)4567890作为条目的电话条目进行验证。我已经实现了一个接受简单数字字符串(例如1234567890)和带破折号123-456-7890的字符串。我知道我在犯一个简单的错误,但我不知道自己在做什么错。
这是可以使用破折号的电话号码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| //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;
}a€? |
这是我无法解决的问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| 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;
}a€? |
- 这是验证电话号码的方法:否。如果您的用户在海外怎么办?如果他们有扩展名怎么办?您从验证中获得的好处通常是通过关上原本不想关上的门而冲走的。 (而且没有任何验证可以确保您获得有效的电话号码;任何验证规则都可以使用真实的伪造号码来欺骗。)
-
为了澄清这一点,它不是用于商业网站,而是我的一部分教育。我正在寻找自己做错了什么。我知道(和)字符是否包含if语句,但是我不确定将它们两个都加入if(
-
您可以使用regex轻松完成此操作:
1
| return !!phone.match(/\\(\\d{3}\\)\\d{7}/g) |
实时演示
更新:
由于忘记了else if:
,因此您无法使用的代码
1
| else if (i == 4) { // Added the"else" on the left. |
434511
这样的事情(一个RegExp规则)可以确保它与任一规则匹配。
1 2 3 4 5 6
| 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'));
} |
编辑:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 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;
} |
434511
使用RegEx检查电话号码当然是可行的方法。这是验证
忽略空格,括号和破折号的函数:
1 2
| check_phone(num) {
return num.replace(/[\\s\\-\\(\\)]/g,'').match(/^\\+?\\d{6,10}$/) != null} |
您可以使用第二个正则表达式{6,10}中的范围来改变要接受的位数。允许前导+。
-
您可以使用regex轻松完成此操作:
1
| return !!phone.match(/\\(\\d{3}\\)\\d{7}/g) |
实时演示
更新:
由于忘记了else if:
,因此您无法使用的代码
1
| else if (i == 4) { // Added the"else" on the left. |
434511
这样的事情(一个RegExp规则)可以确保它与任一规则匹配。
1 2 3 4 5 6
| 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'));
} |
编辑:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 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;
} |
434511
使用RegEx检查电话号码当然是可行的方法。这是验证
忽略空格,括号和破折号的函数:
1 2
| check_phone(num) {
return num.replace(/[\\s\\-\\(\\)]/g,'').match(/^\\+?\\d{6,10}$/) != null} |
您可以使用第二个正则表达式{6,10}中的范围来改变要接受的位数。允许前导+。
-
您可以使用regex轻松完成此操作:
1
| return !!phone.match(/\\(\\d{3}\\)\\d{7}/g) |
实时演示
更新:
由于忘记了else if:
,因此您无法使用的代码
1
| else if (i == 4) { // Added the"else" on the left. |
434511
这样的事情(一个RegExp规则)可以确保它与任一规则匹配。
1 2 3 4 5 6
| 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'));
} |
编辑:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 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;
} |
434511
使用RegEx检查电话号码当然是可行的方法。这是验证
忽略空格,括号和破折号的函数:
1 2
| check_phone(num) {
return num.replace(/[\\s\\-\\(\\)]/g,'').match(/^\\+?\\d{6,10}$/) != null} |
您可以使用第二个正则表达式{6,10}中的范围来改变要接受的位数。允许前导+。
您可以使用regex轻松完成此操作:
1
| return !!phone.match(/\\(\\d{3}\\)\\d{7}/g) |
实时演示
更新:
由于忘记了else if:
,因此您无法使用的代码
1
| else if (i == 4) { // Added the"else" on the left. |
- gdoron指的是正则表达式。他的答案的补充:查看Mozilla的RegExp文档或自己尝试。
-
我已经看到了这个例子来回答类似的问题。我毫不怀疑它可以工作(实际上比我正在显示的程序更好的编程),但是出于练习的目的,我需要保持与isTwelveAndDashes(phone)函数相似的风格。
-
谢谢。我知道这是一件非常简单而愚蠢的事情。
-
@JoshuaAslanSmith。乐意效劳。
使用RegEx检查电话号码当然是可行的方法。这是验证
忽略空格,括号和破折号的函数:
1 2
| check_phone(num) {
return num.replace(/[\\s\\-\\(\\)]/g,'').match(/^\\+?\\d{6,10}$/) != null} |
您可以使用第二个正则表达式{6,10}中的范围来改变要接受的位数。允许前导+。
这样的事情(一个RegExp规则)可以确保它与任一规则匹配。
1 2 3 4 5 6
| 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'));
} |
编辑:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 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)函数相似的风格。
-
谢谢。我知道这是一件非常简单而愚蠢的事情。
-
没问题。我为您的函数编写了一个替代方法,该方法要短得多,以防万一。