我有一个电话号码输入字段。
现在我想用jquery / javascript检查数字的语法和字符
我只接受以下格式:31-123456789(也可以用-分隔更多的组)
首先检查是否有国际代码很重要。
我想做一种替换,以替换“()/。:;”。字符,并检查第一个字母是否为0。
但这会查找较大的代码,也不会检查用户是否输入了不允许的字符,例如Abc ...
我如何以最简单的方式检查并格式化以下示例?
031(123)123 -> should return 31-123-123
(0123)123 -> should return a error (no international code)
031.123 -> should return a error (no international code)
31.(123)123 -> 31-123-123
+31.123.123 -> 31-123-123
+31 (123) 123 -> 31-123-123
等
感谢您向我展示和解释这样做的方式。
答案 0 :(得分:1)
这里是您可以继续尝试的尝试。它还可以满足您的所有要求。
现在,您只需将配置添加到internationalCodes
,该方法即可完成工作
// All valid internationl code
var internationalCodes= [
{ codes:["031", "0031", "31"], translateTo: "31", minLength: 8 }
]
var seperatorCount =3;
var seperator = "-";
function getNumber(num){
var notValid = num + " not valid";
num = num.trim().replace(/[^0-9]/g, ""); // replace all none number char
// find the international configration settings
var r = internationalCodes.filter(x=>
x.codes.findIndex(i=> num.substr(0, i.length)== i) != -1)
if (r.length<=0) // no internationalCodes configration
return notValid;
r = r[0];
if (num.length<r.minLength)
return notValid;
var resultNum = r.translateTo;
var code = r.codes.filter(x=> num.substr(0, x.length) == x)[0]
num = num.substr(code.length, num.lengt)
for (var i = 0; i< num.length; i++)
{
if (i % seperatorCount == 0)
resultNum += seperator;
resultNum += num[i];
}
return resultNum;
}
console.log(getNumber("031(123)123"))
console.log(getNumber("(0123)123"))
console.log(getNumber("031.123"))
console.log(getNumber("31.(123)123"))
console.log(getNumber("+31.123.123"))
console.log(getNumber("+31 (123) 123"))
console.log(getNumber("+50 (123) 123"))