5

以下正则表达式:

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 输入插件(因为如果编辑中间字符,它的焦点就会混乱)
4

5 回答 5

15

怎么样

> "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"
于 2013-05-16T22:57:16.777 回答
4

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

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);
});
于 2015-10-12T22:33:31.247 回答
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"
于 2013-05-16T22:53:28.217 回答
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>

于 2020-04-22T08:13:51.790 回答
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>
于 2020-12-31T11:40:12.890 回答