大小不同的数字的正则表达式

标签 regex

我有一个联邦税号(整数 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/

相关文章:

php - 我应该如何分隔一串正则表达式?

javascript - 正则表达式匹配 URL 来包含/wp-content/

python - 如何在 Python 中使用正则表达式将字符串中的字符替换为 '#' s

javascript - 正则表达式每个点换行,但仅在引号之外

java - {aa=xx bb=yy} 和 {aa=xx} 的正则表达式模式

regex - 使用 HTTP_HOST 来识别识别以前的主机名

javascript - 匹配http或www的正则表达式

正则表达式:两次比赛之间的否定超前

regex - 开启debug后如何理解re.pm的输出?

javascript - 使用jquery从变量中删除textarea中的所有url