Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正在尝试向工作正则表达式添加阿拉伯语数字支持_Php_Regex - Fatal编程技术网

Php 正在尝试向工作正则表达式添加阿拉伯语数字支持

Php 正在尝试向工作正则表达式添加阿拉伯语数字支持,php,regex,Php,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,但我需要将其添加到我的工作正则表达式中 谢谢您可以更改您的模式,这样\d的每一次出现都会被[\d\x{0660}-\x{0669}]替换\x{…}用于用给定的十六进

我正在用下面的正则表达式验证电话号码

^\+\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,但我需要将其添加到我的工作正则表达式中


谢谢

您可以更改您的模式,这样\d的每一次出现都会被[\d\x{0660}-\x{0669}]替换\x{…}用于用给定的十六进制代码表示特定字符,您也可以用这些代码应用范围。在Javascript中也可以使用\u…,这样您的模式将是[\d\u0660-\u0669]


您也可以为您的模式启用u-flag unicode,这将导致\d匹配任何unicode数字,包括拉丁语和阿拉伯语,但不限于拉丁语和阿拉伯语。它还将影响\w和[[:alpha:]]等其他标记,但这不应该是问题。

不要更改模式。只要做:

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

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

\x{0660}表示正则表达式中的unicode字符。只需相应地替换数字。@icecub。。。我正在对regex进行测试,但我似乎不知道在哪里添加您刚才提到的内容。。我不太擅长修改正则表达式tbhCan在这方面也帮不了你。你的正则表达式很复杂。除此之外,我不知道正确的阿拉伯数字格式是什么。比如什么是开始?它包含多少个数字?Etc etcSeems您必须用[\d\x{0660}-\x{0669}]替换任何出现的\d。您也可以使用u标志启用unicode支持,但\d将匹配所有unicode数字,而不仅仅是阿拉伯语和西班牙语latin@SebastianProske您是正确的,尽管\x{…}不需要u标志。当你想接受unicode数字时,只需要当你想接受unicode数字时才需要它。这里是目前为止为止工作的工作的东西,目前为止工作的只需要当你想接受unicode数字时只需要当你想接受unicode数字时只需要当你想接受unicode数字时只需要它。这里是你想做的工作的东西。这里是到目前为止为止为止工作的工作的工作的工作的东西,目前为止为止的工作的工作的工作的只只只只只只只只需要当当你想^\\\\\\\\\\\\\\\\\\\\\\\\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\x{0{0\d{0{d{d{d{0{d\d{d{d{0\0{0{0{0\0{0{0{0{0\0{0\0-\x{0669}]{3,4}-|.|?[\d\x{0660}-\x{0669}]{4}{0,1}$如何在JS中支持这个正则表达式?应该是[\d\u0660-\u0669]在JS中。