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

6

我有这个正则表达式:

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

我想对只允许数字的输入框进行修改,使其能够接受包含空格的法国电话号码格式(例如 0123456789 可以输入为 "01 23 45 67 89")。

能帮忙吗?

5个回答

8
如果你想要恰好8位数字,但仍允许任意数量的空格字符,可以使用以下正则表达式:^(?:\s*\d){8}$
如果你还想要允许连字符,可以使用以下正则表达式:^(?:\s*-*\s*\d){8}$

4
如果您的字符串中可以随意包含空格,那么就很简单了,只需将其添加到字符类即可。
preg_match("#^([0-9 ]+)$#", $post['telephone'])

但这将允许在开头有5个空格。
^\d{2}(?: ?\d+)*$

需要更加复杂。首先是两个数字,然后是一个可选的组,该组以可选空格开头,后跟至少1个数字。该组可以重复0次或多次。

这将匹配

01 23 45 67 89

0123456789

01234 5679


1

这个函数会去除除数字、空格和破折号以外的任何字符。

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

你想要只验证(匹配并中止)还是清洗、尝试清理并继续进行?

0

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

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

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

它将涵盖所有法国移动电话和非移动电话的选项。


3
regex101的链接总是一个很好的补充,但你仍然应该在你的答案中放置正则表达式,以防止它因为是“仅链接答案”而被删除。 - Gary

-1

这个怎么样?

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接