Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.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正则表达式:电话号码7-12位可能包含hypen或空格_Php_Regex_Phone Number - Fatal编程技术网

php正则表达式:电话号码7-12位可能包含hypen或空格

php正则表达式:电话号码7-12位可能包含hypen或空格,php,regex,phone-number,Php,Regex,Phone Number,我在下面的链接中尝试了7-12位电话号码的解决方案,这些号码可能包含空格或hypens。第一个和最后一个字符必须是数字 然而,我不太理解正则表达式 $phone_pattern="/^\d(?:[-\s]?\d){6,11}$/"; 这里“:”是什么意思 这个正则表达式如何从6到11个字符中排除hypens和空格 非常感谢您的帮助这是可以理解的。实际上,(?:…)表示“非捕获组”,而(…)表示“捕获组”。如果您只是针对正则表达式测试字符串,而不是捕获子字符串,那么就您的目的而言,这两个字符串

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

然而,我不太理解正则表达式

$phone_pattern="/^\d(?:[-\s]?\d){6,11}$/";
这里“:”是什么意思

这个正则表达式如何从6到11个字符中排除hypens和空格


非常感谢您的帮助

这是可以理解的。实际上,
(?:…)
表示“非捕获组”,而
(…)
表示“捕获组”。如果您只是针对正则表达式测试字符串,而不是捕获子字符串,那么就您的目的而言,这两个字符串实际上是相同的

还有
(?=…)
(?!…)
(?(?…)
(?(?…)
,它们的含义也不尽相同,这也于事无补


有很多东西需要学习,但肯定是值得的!

这是可以理解的,为什么会令人困惑。
(?:…)
实际上表示一个“非捕获组”,而不是
(…)
,它是一个“捕获组”.如果您只是针对正则表达式测试字符串,而不是捕获子字符串,那么就您的目的而言,这两个字符串实际上是相同的

还有
(?=…)
(?!…)
(?(?…)
(?(?…)
,它们的含义也不尽相同,这也于事无补


有很多东西需要学习,但肯定是值得的!

(?:…)
的一部分-意思是“非捕获组”-它对内容进行分组,但不会像正常分组那样创建对内容的反向引用(即$1、$2等)

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

/^\d{7,12}$/

这将仅与数字匹配。若要允许使用此匹配的Heiphen和空格,但只获取所需的数字,可以如下使用:

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

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

(?:…)
的一部分,意思是“非捕获组”-它对内容进行分组,但不会像正常分组那样创建对内容的反向引用(即$1、$2等)

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

/^\d{7,12}$/

这将仅与数字匹配。若要允许使用此匹配的Heiphen和空格,但只获取所需的数字,可以如下使用:

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

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

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

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

在这种情况下,并不意味着前面的零次或一次,它是一个修饰符,意思是给这个组一个新的含义,与修饰符一起使用:关闭捕获意味着你希望它是一个非捕获组表达式

这样做的效果是,当将表达式的一部分放置在()中时,默认情况下会导致捕获,但?:会关闭此功能

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

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


因此,删除捕获加快了匹配过程,并允许您选择不重新引用该组。将9个引用中的一个保存为您确实希望重新引用的组。

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

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

在这种情况下,并不意味着前面的零次或一次,它是一个修饰符,意思是给这个组一个新的含义,与修饰符一起使用:关闭捕获意味着你希望它是一个非捕获组表达式

这样做的效果是,当将表达式的一部分放置在()中时,默认情况下会导致捕获,但?:会关闭此功能

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

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


因此,删除捕获加快了匹配过程,并允许您选择不回指该组将9个引用中的一个保存为您确实想回指的组。

您到底需要什么帮助?您有解决方案,需要解释吗?或者您想匹配不同的内容。您到底需要做什么你需要帮助吗?你有一个解决方案,你需要解释吗?或者你想匹配一些不同的东西。我不知道什么是非捕获组。我想我必须读很多。感谢你的精彩解释!你使用括号捕获匹配并将其放在“回调”中-$1、$1等。如果您想使用括号而不将其放入回调中,您可以使用(?:)-它将相同的内容分组,只是不将引用放入$1、$2、$3等:)你能告诉我反向引用和非捕获组的目的是什么吗?这对我来说似乎是高级正则表达式。我不知道。我只理解简单的正则表达式。请帮助。谢谢。我发现了这个伟大的链接,我现在正在阅读。如果我有疑问,我会告诉你。如果你想重复一组规则-我。