匹配一个11位数的澳大利亚ABN与不确定的非重复分离器

时间:2017-05-25 23:54:07

标签: regex

我如何准确匹配11位数字(澳大利亚ABN),其中任何数字对可能会或可能不会由任何单个非字母数字字符(例如连字符,句点或任何字符)分隔空白包括新行)?

我尝试(\d\W*?){11},但这匹配了多个“分隔符”。

正则表达式应匹配所有这些......

1 1 1 1 1 1 1 1 1 1 1
11111111111
1-1111111111
1.1.1.1.1.1.1.1.1.1.1

但没有这些

1  1 1 1 1 1 1 1 1 1 1
1--1111111111

2 个答案:

答案 0 :(得分:1)

你的正则表达式允许任意数量的非单词字符(通过*),并且最后允许非单词字符(最后一组可能有它们)。

您想要10组数字后跟可选的非数字,后跟数字:

^(\d\D?){10}\d$

请参阅demo,其中会传递您的示例。

如果要限制分隔符可能是什么,例如只有点,空格或破折号,请为分隔符使用字符类:

^(\d[.\s-]?){10}\d$

请注意\s(空格)包含换行符。

答案 1 :(得分:0)

来自布里斯维加斯的G'day!我拥有的ABN不是那种格式。它看起来像这样:## ### ### ###

还有一个用于数学验证有效ABN的公式(更不用说您可以在其网站上进行搜索),您可以看到here

我创建了一个与您的示例输入匹配的新模式,以及我建议的格式(并且它比其他建议的模式更有效)。

^(?:\d-?\d{10}|\d(?:[ \.]?\d){10})$

Demo Link