【问题标题】:Javascript Regular Expression to add dash after every 3rd and 4th charactersJavascript正则表达式在每3个和4个字符后添加破折号
【发布时间】:2013-05-16 22:21:49
【问题描述】:

以下正则表达式:

x.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, "-"); 

在每个 第 3 个 字符之后添加破折号,因此输入的 123456789 变为 123-456-789。 我试图使用这个正则表达式来格式化电话号码。问题出现在第 10 个字符上。所以输入的1234567890变成了1-234-567-890

如何修改上述正则表达式以将具有 10 位数字的字符串转换为 123-456-7890。我使用这个正则表达式是因为这发生在用户输入使用 keyup 事件时。

如果您知道更简单或更好的方法,请帮帮我,用户输入时必须添加破折号。不允许使用其他字符。

注意事项:

  1. 不能使用 Jquery Masked 输入插件(因为如果编辑中间字符,它的焦点会混乱)

【问题讨论】:

  • 电话号码可以多长时间? 9 和 10 是我在这里看到的,但是您还需要考虑其他可能性吗?

标签: javascript jquery regex


【解决方案1】:

怎么样

> "12345678".match(/\d{3}(?=\d{2,3})|\d+/g).join("-")
"123-456-78"
> "123456789".match(/\d{3}(?=\d{2,3})|\d+/g).join("-")
"123-456-789"
> "1234567890".match(/\d{3}(?=\d{2,3})|\d+/g).join("-")
"123-456-7890"

【讨论】:

  • 有效,但如果我从中间删除/添加数字并添加数字,它不会重新格式化它。示例:“123-456-7890”在 5 旁边添加数字 1 给出结果:“123-4516-7890”不应允许
  • @GGio:先删除破折号val=val.replace(/-/g,''),然后重新格式化。
  • 123-4567890,请帮助我得到这样的结果。仅在前 n 位后插入连字符
【解决方案2】:

如果您已经拥有完整的数字或字符串

var x = "329193914";
console.log(x.replace(/(\d{3})(\d{3})(\d{3})/, "$1-$2-$3"));

如果你想有人在打字……

$('#locAcct').keyup(function () {
    var foo = $(this).val().split("-").join(""); // remove hyphens
    if (foo.length > 0) {
        foo = foo.match(new RegExp('.{1,3}', 'g')).join("-");
    }
    $(this).val(foo);
});

【讨论】:

    【解决方案3】:

    您是否需要对所有内容都使用正则表达式,或者类似的东西也可以帮助您?

    function convertToValidPhoneNumber(text) {
        var result = [];
        text = text.replace(/[^\d]/g,"");
        while (text.length >= 6) {
            result.push(text.substring(0, 3));
            text = text.substring(3);
        }
        if(text.length > 0) result.push(text);
        return result.join("-");
    }
    

    您可以在每次输入字段中的文本更改时使用此功能。它将产生以下结果:

    "12345678" -> "123-45678"
    "123d456789" -> "123-456-789"
    "123-4567-89" -> "123-456-789"
    

    【讨论】:

      【解决方案4】:

      我相信最简单的方法是在每个 n digits 之后添加破折号就像

      var a = $('#result');
      var x = "<p>asiija kasdjflaksd jflka asdkhflakjshdfk jasd flaksjdhfklasd f</p><p>12345678912345678912345678912312344545545456789</p>"
      
      a.html(x.replace(/(\d{15})/g, "$1-"));
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <div id="result"></div>

      【讨论】:

        【解决方案5】:

        最简单的方法是使用简单的 javascript onkey 和函数...它会在您输入/键入的每 3 个字符后加上破折号连字符。

        <input type="text" class="form-control" name="sector" id="sector" onkeyup="addDash(this)" required>
        

        添加以下脚本

        <script>
            function addDash (element) {
                let ele = document.getElementById(element.id);
                ele = ele.value.split('-').join('');    // Remove dash (-) if mistakenly entered.
        
                let finalVal = ele.match(/.{1,3}/g).join('-');
                document.getElementById(element.id).value = finalVal;
            }
        </script>
        

        【讨论】:

        • 为什么你今天对你所有的答案都大喊大叫?请编辑您的答案并使用小写而不是大写。
        • @ZsoltMeszaros 只是因为大写,顺便说一句,为什么用小写写很重要?
        • 因为完全用大写字母输入的消息等同于大喊大叫和其他争论行为。
        猜你喜欢
        • 2021-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多