马来西亚手机号码的正则表达式

问题描述

这是我目前使用的正则表达式模式,例如:01xxxxxxxx:

<input class="mdl-textfield__input" name="mobile_number" type="text" pattern="^(\+?6?01)[0-46-9]-*[0- 
9]{7,8}$">

我试图不仅允许 10 位数字,还允许其他格式为 11 位数字 (01xxxxxxxxx) 和办公室号码,例如:0xxxxxxxx。

有人可以帮我吗?

解决方法

您可以使用替代 | 来匹配可选的前缀部分,如果不需要连字符,则省略匹配,第二个替代匹配 0 后跟 8 位数字。

模式属性是隐式锚定的,所以可以省略^$

\+?6?(?:01[0-46-9]\d{7,8}|0\d{8})

模式匹配:

  • \+?6? 匹配可选的 + 和可选的 6
  • (?: 交替的非捕获组
    • 01[0-46-9]\d{7,8} 匹配 01 然后是除 5 和 7-8 位数字之外的一个数字
    • |
    • 0\d{8} 匹配一个 0 和 8 个数字
  • ) 关闭非捕获组

Regex demo