将Javascript正则表达式转换为兼容的preg_match()

时间:2011-11-16 04:53:35

标签: php javascript regex

我有来自javascript的这段代码

/+\uFF0B0-9\uFF10-\uFF19\u0660-\u0669\u06F0-\u06F9u/
在阅读了一些关于php& amp; \ u支持我将其转换为\ x

/\+\x{FF0B}0-9\x{FF10}-\x{FF19}\x{0660}-\x{0669}\x{06F0}-\x{06F9}/u

但我仍然无法在php中使用它

$phoneNumber = '+911561110304';
$start = preg_match('/\+\x{FF0B}0-9\x{FF10}-\x{FF19}\x{0660}-\x{0669}\x{06F0}-\x{06F9}/u', $phoneNumber,$matches);

匹配将为空!

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

看起来您想要匹配ASCII加号或其日语Halfwidth等效项,然后是来自几个不同书写系统的一个或多个数字。但是,正如@mario观察到的那样,你似乎缺少一些方括号。 JavaScript版本可能应该是:

/[+\uFF0B][0-9\uFF10-\uFF19\u0660-\u0669\u06F0-\u06F9]+/

(我最后看不到u的任何原因,所以我放弃了它。)PHP版本将是:

'/[+\x{FF0B}][0-9\x{FF10}-\x{FF19}\x{0660}-\x{0669}\x{06F0}-\x{06F9}]+/u'

当然,这将允许混合使用相同数字的ASCII,阿拉伯语和半字符字符。如果这是一个问题,你需要稍微分解一下。例如:

'/\+(?:[0-9]+|[\x{0660}-\x{0669}]+|[\x{06F0}-\x{06F9}]+)|\x{FF0B}[\x{FF10}-\x{FF19}]+/u'