我从用户输入的电话号码为+ 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。
有人可以用一些例子指导我如何完成这项任务。 谢谢
答案 0 :(得分:1)
尝试塑造输入:
result = subject.replace(/^((\+|00)\d{2,3})-?(\d{1,2})-?(\d{3})-?(\d{4})$/mg, "$1-$3-$4-$5");
然后进行下一步。
答案 1 :(得分:1)
将元素的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
格式时执行此操作,请在您的if语句中添加string.match(/^\+\d{11}$/)!==null
。 (^
,$
表示字符串的开头和结尾,\+
表示加号,\d
表示数字0-9,正好重复{{1} }次)。具体做法是:
{11}