我有一个联邦税号(整数 9)(非负),需要将其格式化为 99-9999999。 在数据库中,我们有一些不适合该格式的数据,因此我需要正则表达式来容纳该数据。
值应显示为
1 => 1
12 => 12
123 => 12-3
123456 => 12-3456
123456789 => 12-3456789
我还需要它不允许超过 9 个数字...如果用户输入 9 个数字,我希望正则表达式在需要的地方嵌入“-”。
这是我尝试过的。
[\d]{1,2}(-([\d]{0,7})?)?+$
但它允许 12- (仅当超过 2 个数字时才需要“-”
并且允许12-34567890(超过9个号码)
最佳答案
您首先需要test()
每个输入字符串,然后执行replace()
来重新格式化它。 test()
将使用以下正则表达式:
^\d(\d(-?\d{1,7})?)?$
匹配由 1 到 9 位数字组成的数字,并正确匹配 -
(如果存在)和 replace()
将具有以下内容:
^(\d\d)-?(\d{1,7})$
因为如果我们有超过 2 位数字,我们需要插入 -
。
演示:
var numbers = ['1-', '11', '12', '123', '123456', '123456789', '12-33']
numbers.forEach(function(n) {
if (/^\d(\d(-?\d{1,7})?)?$/.test(n)) {
console.log(n + ' => ' + n.replace(/^(\d\d)-?(\d{1,7})$/, '$1-$2'));
} else {
console.log(n + ' => Wrong format.');
}
});
关于大小不同的数字的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53089649/