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

Extract substring out of a user input phone number using Javascript

本文关键字:提取 字符串 电话号码 Javascript 用户 输入 使用      更新时间:2023-09-26

我从用户那里获得电话号码输入为+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;
}

它工作得很好,但问题是

编辑:如果用户输入为 +XXXXXXXXXXX(全部)并按回车键或转到另一个字段,则输入将根据正则表达式自行设置

,即 +XXX-XX-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 格式时才执行此操作,请在 if 语句中添加string.match(/^'+'d{11}$/)!==null。(^$表示字符串的开始和结束,'+表示加号,'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
}

尝试调整输入:
result = subject.replace(/^(('+|00)'d{2,3})-?('d{1,2})-?('d{3})-?('d{4})$/mg, "$1-$3-$4-$5");

然后执行下一个过程。