【发布时间】:2020-05-10 05:15:29
【问题描述】:
我正在尝试编写一个函数,该函数将从输入元素中获取内容,并尝试将输入框中输入的数字格式化为 MM/YY。以下是我的解决方案,我想减少它的行数。谁能帮我写一个更好的函数来做到这一点?
如果你看到这个,它会自动插入斜杠。工作演示:https://codepen.io/ermauliks/pen/EXBryQ?editors=1010
function formatString(string) {
return string.replace(
/^([1-9]\/|[2-9])$/g, '0$1/' // To handle 3/ > 03/
).replace(
/^(0[1-9]{1}|1[0-2]{1})$/g, '$1/' // 11 > 11/
).replace(
/^([0-1]{1})([3-9]{1})$/g, '0$1/$2' // 13 > 01/3
).replace(
/^(\d)\/(\d\d)$/g, '0$1/$2' // To handle 1/11 > 01/11
).replace(
/^(0?[1-9]{1}|1[0-2]{1})([0-9]{2})$/g, '$1/$2' // 141 > 01/41
).replace(
/^([0]{1,})\/|[0]{1,}$/g, '0' // To handle 0/ > 0 and 00 > 0
).replace(
/[^\d\/]|^[\/]{0,}$/g, '' // To allow only numbers and /
).replace(
/\/\//g, '/' // Prevent entering more than 1 /
);
}
event.target.value = formatString(value);
【问题讨论】:
-
如果您有工作代码,可以尝试在此处发布:codereview.stackexchange.com
-
@Maulik - 你能得到一个强大的解决方案吗?我正在寻求实现一个类似的。这里面的问题是,输入有效日期后,如果你编辑一个月,验证就不能正常工作了
标签: javascript regex