Javascript Regular Expression在每个第3个和第4个字符后添加破折号

时间:2013-05-16 22:21:49

标签: javascript jquery regex

以下正则表达式:

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

在每个第三个字符后添加短划线,因此输入123456789变为123-456-789。 我试图用这个正则表达式来格式化电话号码。问题出现在第10个字符上。因此输入的1234567890变为1-234-567-890

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

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

备注:

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

5 个答案:

答案 0 :(得分:11)

怎么样

> "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"

答案 1 :(得分:1)

你是否需要为所有事情使用正则表达式,或者这样的事情也可以帮助你?

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"

答案 2 :(得分:1)

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

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 :(得分:0)

我相信最简单的方法是在每一个 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>

答案 4 :(得分:0)

最简单的方法是以下使用简单的 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>