国际电话的正则验证

遇到一个问题,边输入,边按334格式动显示短横杠,例如户输1234567890,展示123-456-7890.
求教大神如果用正则该怎么做匹配。我尝试了大半天,总是匹配不到正确的位置。

阅读 4.1k
4 个回答

下面的代码可以在 chrome 浏览器的开发者工具的控制台中运行,仅供参考。

var phone_number = '1234567890';
phone_number.replace(/(\d{3})(\d{3})(\d{4})/, function(full, a, b, c){
  if(full === phone_number) {
    return a + '-' + b + '-' + c;
  } else {
    console.log('电话号码格式不正确');
    return full;
  }
});

$str = '1234567890';

$pattern = "/(\d{3})(\d{3})(\d{4})/";

echo preg_replace($pattern,"\${1}-\${2}-\${3}",$str);

123-456-7890

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>phone</title>
</head>

<body>
    <div style="position: relative;">
        <input type="text" id="display" style="position: absolute;">
        <!-- 隐藏input用于输入 -->
        <input type="text" id="input" style="position: absolute; opacity: 0;">
    </div>

    <script>
        var input = document.getElementById('input');
        var display = document.getElementById('display');

        input.oninput = function () {
            // 只保留十位数字
            this.value = this.value.replace(/^.*?(\d{1,10}).*?$/, '$1');
            // 提取号码段
            var nums = this.value.match(/^(\d{0,3})(\d{1,3})?(\d{1,4})?$/);
            // 格式化显示
            display.value = nums[1] + (nums[2] ? '-' + nums[2] : '') + (nums[3] ? '-' + nums[3] : '');
        }
    </script>
</body>

</html>
let phone = '1234567890'.replace(/(\d{3})(\d{3})(\d{4})/, `$1-$2-$3`)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题