Javascript 如何获取从用户接收数字的正则表达式

Javascript 如何获取从用户接收数字的正则表达式,javascript,jquery,regex,Javascript,Jquery,Regex,我正在尝试为美国电话号码编写一个正则表达式,用户可以在其中输入号码并自动输入破折号。 但这里的缺点是,如果用户输入“123”,然后“-”regex将中断,而不是123-456-7890,它将变为123-456780 以下是正则表达式代码: $('#AccountFrm_telephone').attr('maxlength', '12'); $('#AccountFrm_telephone').keyup(function(){ $(this).val($(this).val().

我正在尝试为美国电话号码编写一个正则表达式,用户可以在其中输入号码并自动输入破折号。 但这里的缺点是,如果用户输入“123”,然后“-”regex将中断,而不是123-456-7890,它将变为123-456780 以下是正则表达式代码:

  $('#AccountFrm_telephone').attr('maxlength', '12');

$('#AccountFrm_telephone').keyup(function(){
    $(this).val($(this).val().replace(/^(\d{3})(\d{3})(\d)+$/, "$1-$2-$3"));
});

也许我们在正则表达式中添加了一些东西,用户无法键入dash?

也许可以尝试以下操作:

$('AccountFrm_telephone').attr('maxlength','12');
$('#AccountFrm_telephone').keyup(函数(){
$(this.val($(this.val()).replace(/(\d{3})(\d{3})(\d{4})/,“$1-$2-$3”);
});用于完成:
你有两个问题
首先,此部分
(\d)+
应为
(\d+
),否则无法正确捕获数字上的最后一组。 第二部分是您无法处理输入中可能出现的破折号,因此请尝试以下操作:

.replace(/^(\d{3})-?(\d{3})-?(\d+)$/, "$1-$2-$3")
问号(?)表示0或1次,这意味着用户可以在需要时输入破折号

$(“#input1”).on('keyup',e=>{
e、 target.value=e.target.value.replace(/(\d{3})-?(\d{3})-?(\d+/,“$1-$2-$3”)
})


这部分
(\d)+
应该是
(\d+)
@Nullman不起作用的:(我已经把你的字符串放入
var x
中,下面的代码工作得很好
x.replace(\d{3})(\d{3})(\d+$/,“$1-$2-$3”)
我试过了,但如果用户输入“-”,则在3号后面需要破折号“-”然后打破正则表达式stillah,然后像删除的帖子建议的那样,使用以下命令:
/^(\d{3})-?(\d{3})-?(\d+)$/,“$1-$2-$3”
注释0或1次