我正在尝试按用户键入格式化美国邮政编码,如果用户输入的数量超过5,则需要在第5个和第6个字符之间添加短划线,以便邮政编码格式化为
55555或55555-5555
我现在添加了一个短划线,但无论是否添加了第6个数字
//zip code formatting
$(".zip-val").keyup(function() {
if($(this).val().length == 5) {
$(this).val($(this).val() + "-");
}
});
答案 0 :(得分:2)
这个怎么样?
//zip code formatting
$(".zip-val").keyup(function() {
zipcode = $(this).val();
zipcode = zipcode.replace(/-/g, ''); // remove all occurrences of '-'
if(zipcode.length > 5) {
$(this).val(zipcode.substring(0, 5) + "-" + zipcode.substring(5));
}
});
答案 1 :(得分:2)
可以试试这个,拆分它并保留数字组,然后用格式重新创建字符串。如果您不在5组中,这甚至会删除-
。
您也可以将其修改为适合信用卡号码系统。
//zip code formatting
$(".zip-val").keyup(function() {
let val = $(this).val();
if(val.length > 5) {
let digits = val.split(/(\d{1,5})/);
let str = "";
for (let group of digits)
{
if (/^\d+$/.test(group))
{
str += group + "-";
}
}
str = str.substring(0, str.length - 1);
$(this).val(str);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="zip-val" />
答案 2 :(得分:1)
您应该检查length
是否为6。此外,您可以添加更多检查,如果用户在第6个字符上使用退格,它也会删除' - '字符
$(".zip-val").keyup(function(e) {
if(e.keyCode == 8)
{
if($(this).val().length == 6){
var newText = $(this).val().substring(0 , 5);
$(this).val(newText);
}
}
else if($(this).val().length == 6) {
var newText = $(this).val().substring(0 , 5) + '-' + $(this).val().substring(5);
$(this).val(newText);
}
});
答案 3 :(得分:0)
你可以试试这个。
$(".zip-val").keyup(function() {
if($(this).val().length > 5 ) {
res = $(this).val().split("");//convert string to array
if(jQuery.inArray( "-", res )){//checks if dash exist
for (var i=res.length-1; i>=0; i--) {//removes dashes
if (res[i] === '-') {
res.splice(i, 1);
}
}
res.splice(5, 0, "-");
}
$(this).val(res.join(''));
}
});