繁体   English   中英

php regex:电话号码7-12位数字可能包含连字符或空格

[英]php regex: phone number 7-12 digits may contain hypen or space

我尝试了以下链接中包含7-12位数字的电话号码的解决方案,其中可能包含空格或连字符。 第一个和最后一个字符必须是数字。

正则表达式匹配7到12位数字; 可能包含空格或连字符

但是,我不太了解正则表达式。

$phone_pattern="/^\d(?:[-\s]?\d){6,11}$/";

“:”在这里是什么意思?

此正则表达式如何排除6到11个字符中的连字符和空格?

帮助帮助受到高度赞赏

:(?: ... ) -意思是“非捕获组”-它对内容进行分组,但不像常规分组那样对它创建反向引用(即$ 1,$ 2等)。

在该正则表达式中,它将匹配6到11个字符, 包括连字符和空格-这意味着将匹配12 ------- 34之类的东西。 我建议使用更严格的模式:

/^\\d{7,12}$/

这只会匹配数字。 要在此匹配中允许使用连字符和空格,但仅获取所需的数字,可以这样使用:

<?php
$pattern = '/^\d{7,12}$/';
$string = '123-456 789';
$ignoreCharacters = array(' ', '-');

preg_match($pattern, str_replace($ignoreCharacters, $string);

令人困惑的是可以理解的。 (?: ... )实际上表示“非捕获组”,与( ... )相反,后者是“捕获组”。 如果您仅针对正则表达式测试字符串,而不捕获子字符串,则对于您的目的,两者实际上是相同的。

也存在(?= ... )(?! ... )(?<= ... )(?<! ... )(?<foo> ... ) (?<! ... )并没有帮助(?<foo> ... ) ,这也意味着不同的事物。

有很多东西要学,但肯定会有所收获!

您是否尝试过像regexpal这样的测试引擎(也可以使用其他引擎),我经常使用它来针对表达式测试各种字符串,以确保它们的行为符合预期。

我的理解是,在这种情况下不是单独行动,而是与

在这种情况下,并不意味着它是0或1之前的修饰语,这意味着给该组一个新的含义,并与修饰语结合使用关闭捕获意味着您希望它成为一个非捕获组表达式。

这样做的效果是,在默认情况下将表达式的一部分放入()时,它将导致捕获,但?:将其关闭。

因此(?:[-\\ s]?\\ d)成为非捕获组表达式。

注意捕获的组与反向引用一起使用,大多数正则表达式引擎最多支持9个反向引用。

因此,删除捕获可加快匹配过程,并允许您选择不返回该组,从而为您确实希望返回的组保存9个参考中的一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM