我需要正确格式化我的电话号码字段,并且我已经完成了它。向电话号码字段值附加+1
我能够使用此脚本在电话号码中添加短划线,但是如何在输入全部10个号码时向电话号码的前面添加“+1”?
$('#tel').keyup(function(){
$(this).val($(this).val().replace(/(\d{3})\-?(\d{3})\-?(\d{4})/,'$1-$2-$3'))
});
我需要正确格式化我的电话号码字段,并且我已经完成了它。向电话号码字段值附加+1
我能够使用此脚本在电话号码中添加短划线,但是如何在输入全部10个号码时向电话号码的前面添加“+1”?
$('#tel').keyup(function(){
$(this).val($(this).val().replace(/(\d{3})\-?(\d{3})\-?(\d{4})/,'$1-$2-$3'))
});
我会当去除前缀和连字符。如果可能的话,首先建议您用input
(其中有IE 10+ support)代替keyup
事件。接下来,您应该重做您的过滤器以获取真正的数值。然后用你的正则表达式来对付它。在我的例子中,我使用虚线分隔的值替换了非10位数字,修剪了所有产生的尾部破折号,并用开头的+1
替换了完整的10位数值。
$('#tel').on('input', function(){
var filteredValue = this.value.replace('+1 ', '').match(/\d*/g).join('');
$(this).val(filteredValue
.replace(/(\d{0,3})\-?(\d{0,3})\-?(\d{0,4}).*/,'$1-$2-$3')
.replace(/\-+$/, '')
.replace(/(\d{3})\-?(\d{3})\-?(\d{4})/,'+1 $1-$2-$3'))
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id=tel>
下面是一个简化版本,更接近原始的,只有让在有10位结束的更换。
$('#tel').on('input', function(){
var filteredValue = this.value.replace('+1 ', '').match(/\d*/g).join('');
$(this).val(filteredValue
.replace(/(\d{3})\-?(\d{3})\-?(\d{4}).*/,'+1 $1-$2-$3'))
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id=tel>
下面的答案似乎仍然在我的IE浏览器。找不到工作不正常的地方,但我喜欢你对filteredValue的建议。它更干净。谢谢你,完美的作品! – cgrouge
你可以使用一个回调来添加+1
时数为10位数以上,然后在十个位数等
$('#tel').on('keyup', function(){
\t if (this.value.replace(/\D/g,'').length > 9) {
\t if (this.value.indexOf('-') === -1) {
\t \t this.value = '+1' + this.value.replace(/(\d{3})\-?(\d{3})\-?(\d{4})/,'$1-$2-$3');
\t }
} else if (this.value.indexOf('-') !== -1) {
\t this.value = this.value.replace(/(\+1|-)/g,'');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="tel">
此解决方案确实按照我的需要工作。另一个回应称,keyup没有IE支持,这可能是唯一的问题。 – cgrouge
@cgrouge - 不,另一个答案是IE10支持'input'事件,并且你应该改变它,这不是真的,IE11和以上都支持它。 '所有**浏览器都支持'keyup'事件,但不会捕获粘贴的内容等。 – adeneo
@cgrouge adeneo在指出我没有说'keyup'不被支持是正确的。这两个事件之间的主要区别在于'keyup'监听正在释放的物理密钥,这强烈表明该值已更改。另一方面,“输入”是当输入的值属性发生变化时触发的事件。通过监听'keyup'来监听该事件有几个好处。然而,我将澄清IE 10支持'input'事件。它在IE 9中也得到了部分支持(不支持删除文本,例如剪切或退格)。 –
如果'+ 1'是不可变的,为什么它需要被添加到输入的开始?也许把它放在输入旁边的一个区域来表明它是静态的。当用户键入最后一位数字时,这也会阻止您的输入文本跳转。 – 1252748