印尼电话号码的正则表达式

Agu*_*aya 2 regex

我需要一个可以接受以下数字格式的正则表达式。

+62 361 222777
+62 813-444-5555
+62 812-3333-3333
+62 811 391 2103
+62 361-2277777
(0361) 227337
+62 8113912103
08134455555
0361-2277777 (*)
+62 812 3333 3333 (*)
+62 877 80803550 (*)
081339222111 (*)
081 339 222 111 (*)
+62 811338429196 (*)
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所做的:

\+62\s\d{3}[-\.\s]??\d{3}[-\.\s]??\d{3,4}|\(0\d{2,3}\)\s?\d+|0\d{2,3}\s?\d{6,7}|\+62\s?361\s?\d+|\+62\d+|\+62\s?(?:\d{3,}-)*\d{3,5}
Run Code Online (Sandbox Code Playgroud)

我上面的正则表达式没有完全找到最后六个数字(用*表示)。有人能帮我吗?谢谢。

Ale*_*gić 5

我的建议是尝试将问题分解为较小的问题。

您可以这样解决:

(\+62 ((\d{3}([ -]\d{3,})([- ]\d{4,})?)|(\d+)))|(\(\d+\) \d+)|\d{3}( \d+)+|(\d+[ -]\d+)|\d+
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看演示。我已将问题分解成较小的部分,例如()|()|...,因此您可以通过删除单个方括号来了解我正在解决的情况。

更简单的方法是:

\+?([ -]?\d+)+|\(\d+\)([ -]\d+)
Run Code Online (Sandbox Code Playgroud)

您可以在这里看到此版本。