我收到用户输入的电话号码 +XXX-X-XXX-XXXX(+XXX 作为国家/地区代码)、(X 作为城市代码)、(XXX 作为第 3 个数字)和(XXX 作为第 2 个 4)数字)。我使用正则表达式来确认输入,如以下代码所示;
function validate(form) {
var phone = form.phone.value;
var phoneRegex = /^(\+|00)\d{2,3}-\d{1,2}-\d{3}-\d{4}$/g;
//Checking 'phone' and its regular expressions
if(phone == "") {
inlineMsg('phone','<strong>Error</strong><br />You must enter phone number.',2);
return false;
}
if(!phone.match(phoneRegex)) {
inlineMsg('phone','<strong>Error</strong><br />Enter valid phone <br />+xxx-x-xxx-xxxx (or) <br />00xxx-x-xxx-xxxx.',2);
return false;
}
return true;
}
它工作得很好,但问题是
编辑:如果用户输入 +XXXXXXXXXXX(全部一起)并按 Enter 或转到另一个字段,则输入会根据正则表达式自行设置,即 +XXX-X-XXX- XXXX。
有人可以通过一些示例来指导我如何完成这项任务吗? 谢谢
最佳答案
将元素的 onblur 方法设置为回调,如下所示:
var isValidPhoneNumber = function(string) {
...
}
var reformat = function(string) {
/*
* > reformat('example 123 1 1 2 3 123-45')
* "+123-1-123-1234"
*/
var numbers = string.match(/\d/g);
return '+' + [
numbers.slice(0,3).join(''),
numbers.slice(3,4).join(''),
numbers.slice(4,7).join(''),
numbers.slice(7,11).join('')
].join('-');
}
var reformatPhoneNumber = function() {
var inputElement = this;
var value = inputElement.value;
if (isValidPhoneNumber(value))
inputElement.value = reformat(inputElement.value);
else
// complain to user
}
以下是设置 onblur 回调处理程序的两种示例方法:
document.getElementById('yourinputelement').onblur = reformatPhoneNumber;
<input ... onblur="reformatPhoneNumber"/>
如果您愿意,您可以使用更多验证代码来增强 reformatPhoneNumber
,或者只是在用户键入号码时不断验证号码。
仅当您的电话号码采用 +ABCDEFGHIJK
形式时才执行此操作,然后添加 string.match(/^\+\d{11}$/)!== null
到你的 if 语句。 (^
,$
表示字符串的开始和结束,\+
表示加号,\d
> 表示数字 0-9,精确重复 {11}
次)。具体来说:
function isPlusAndEleventDigits(string) {
/*
* Returns whether string is exactly of the form '+00000000000'
* where 0 means any digit 0-9
*/
return string.match(/^\+\d{11}$/)!==null
}
关于javascript - 使用 Javascript 从用户输入的电话号码中提取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10257123/