试图向工作正则表达式添加阿拉伯数字支持


Trying to add arabic numeric support to a working regex

我正在使用以下正则表达式验证电话号码

^(('+'d{1,3}(-|.| )?'(?'d')?(-| |.)?'d{1,5})|('(?'d{2,6}')?))(-|.| )?('d{3,4})(-|.| )?('d{4})(( x| ext)'d{1,5}){0,1}$

它工作得很好

我需要添加阿拉伯数字支持,例如。"٠١٢٣٤٥٦٧٨٩"

我已经做了一些研究,发现'u0660和'u0669在阿拉伯语中从0到9计数,但我需要将其添加到我的工作正则表达式中。

谢谢

不要改变图案。只做:

$temp = str_replace(['٠','١','٢','٣','٤','٥','٦','٧','٨','٩'], range(0, 9), $input);`

然后在临时变量上运行测试。抱歉,第一个数组从后到前,但字节顺序应该是正确的

您可以更改模式,以便每次出现'd时,'d都被['d'x{0660}-'x{0669}]取代。'x{....}用于使用给定的十六进制代码表示特定字符,您也可以使用这些范围。同样可以在Javascript中使用'u....来完成,所以你的模式将是['d'u0660-'u0669]

您也可以为您的模式打开u -标志(unicode),这将导致'd匹配任何unicode数字(包括拉丁语和阿拉伯语,但不限于它们)。它也会影响其他令牌,如'w[[:alpha:]],但在这里应该不是问题。