Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript从用户输入的电话号码中提取子字符串_Javascript_Regex_Phone Number_Onblur - Fatal编程技术网

使用Javascript从用户输入的电话号码中提取子字符串

使用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

我收到用户输入的电话号码为+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 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
}