正则表达式允许空格(对于电话号码正则表达式)


Regex allowing spaces (for a Phone number regex)

我有这个正则表达式:

preg_match("#^([0-9]+)$#", $post['telephone'])

谁只允许数字(对于法语类型的电话号码,所以0123456789),但我想允许空格。例如,允许这种类型的字符串:"01 23 45 67 89"。

你能帮帮我吗?

例如,如果您想正好有 8 位数字,但仍允许任意数量的空格字符,则以下内容很棒:

^(?:'s*'d){8}$

或者,如果您也想允许使用短划线:

^(?:'s*-*'s*'d){8}$

如果字符串中的任何位置都可以有空格,那么这很简单,只需将其添加到您的字符类中即可

preg_match("#^([0-9 ]+)$#", $post['telephone'])

但这在开始时将允许 5 个空格。

^'d{2}(?: ?'d+)*$

会更复杂一些。以两位数字开头,然后是可选组,以可选空格开头,后跟至少 1 位数字。该组可以重复 0 次或更多次。

这将匹配

01 23 45 67 89

0123456789

01234 5679

这个去掉了除数字、空格和破折号以外的任何内容。

$input = '0123?> Abc -_#';
$output = preg_replace('#[^0-9- ]#', '', strtolower($input));
echo($output);

您只想验证(匹配和中止)还是清理,尝试清理并继续?

刚刚遇到了同样的问题,如果有人遇到这个问题,我创建了这个正则表达式:

(?:((?:'+|00)(?:33|33's0))|0)'s*[1-9](?:[ ]'d{2}){4}

演示:https://regex101.com/r/aFIwp7/1

它将涵盖手机号码和非手机号码的所有法语选项。

这个怎么样?

preg_match("/^'d('s*'d)*$/", $post['telephone'])