使用Javascript从用户输入的电话号码中提取子字符串
我收到用户输入的电话号码为+XXX-X-XXX-XXXX,其中(+XXX为国家代码),(X为城市代码),(XXX为前3位数字)和(XXX为后4位数字)。我使用正则表达式确认输入,如下代码所示使用Javascript从用户输入的电话号码中提取子字符串,javascript,regex,phone-number,onblur,Javascript,Regex,Phone Number,Onblur,我收到用户输入的电话号码为+XXX-X-XXX-XXXX,其中(+XXX为国家代码),(X为城市代码),(XXX为前3位数字)和(XXX为后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 r
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;
}
函数验证(表单){
var phone=form.phone.value;
var phoneRegex=/^(+12400)\d{2,3}-\d{1,2}-\d{3}-\d{4}$/g;
//检查“phone”及其正则表达式
如果(电话==“”){
inlineMsg('phone','错误
您必须输入电话号码',2);
返回false;
}
如果(!phone.match(phoneRegex)){
inlineMsg('phone','错误
输入有效电话
+xxx-x-xxx-xxxx(或)
00xxx-x-xxx-xxxx',2);
返回false;
}
返回true;
}
它工作得很好,但问题是
编辑:如果用户输入为+xxxxxxxxxx(全部)并点击回车或转到另一个字段,则输入将根据+XXX-X-XXX-XXXX的正则表达式自行设置
有人能给我举个例子来指导我如何做这项工作吗。
谢谢您尝试调整输入:result=subject.replace(/^((\+\12400)\d{2,3})-?(\d{1,2})-?(\d{3})-?(\d{4})$/mg,“$1-$3-$4-$5”)代码>
然后执行下一步骤。将元素的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"/>
我隐约记得一个jQuery插件就是这样做的。但无法记住名称,请尝试搜索。编辑:找到它:可能的重复(如果您不认为是这种情况,您应该澄清您所说的“我希望用户输入为+xxxxxxxxxx(全部),然后是onblur(),输入根据正则表达式自行设置”;不幸的是,我们无法理解语法。)@ninjagecko:这不是那个问题的重复。在找到重复的问题之前,请先阅读该问题。@Truth:该问题无法理解。我不希望在OP或其他人很快澄清的情况下,投票否决或投票结束。如果您不同意并且能够理解问题,请编辑它以使其更清楚。@事实上,这正是我所需要的,但不幸的是,我对JQuery是新手。我不知道到底是怎么回事。您有其他选择吗?据我所知,您必须根据+XXX-XX-XXX-XXXX
对输入字符串(即主题
)进行塑形,通过根据结果
替换主题
,您的字符串结构正确。然后检查数据。你的意思是我现在不必使用JQuery吗?你说的“然后检查数据”是什么意思?哇..看起来很酷,让我检查一下,如果有任何问题,我会告诉你。
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
}