Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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,我已经编写了可以从diff线程获得的regex组合来验证英国数字 根据regex,应验证编号0208123-4567。但事实并非如此。问题是什么 您可以尝试改用此regexp: $pattern = '^\(?(?:(?:0(?:0|11)\)?[\s-]?\(?|\+)44\)?[\s-]?\(?(?:0\)?[\s-]?\(?)?|0)(?:\d{2}\)?[\s-]?\d{4}[\s-]?\d{4}|\d{3}\)?[\s-]?\d{3}[\s-]?\d{3,4}|\d{4}\)?[\s-

我已经编写了可以从diff线程获得的regex组合来验证英国数字

根据regex,应验证编号0208123-4567。但事实并非如此。问题是什么


您可以尝试改用此regexp:

$pattern = '^\(?(?:(?:0(?:0|11)\)?[\s-]?\(?|\+)44\)?[\s-]?\(?(?:0\)?[\s-]?\(?)?|0)(?:\d{2}\)?[\s-]?\d{4}[\s-]?\d{4}|\d{3}\)?[\s-]?\d{3}[\s-]?\d{3,4}|\d{4}\)?[\s-]?(?:\d{5}|\d{3}[\s-]?\d{3})|\d{5}\)?[\s-]?\d{4,5}|8(?:00[\s-]?11[\s-]?11|45[\s-]?46[\s-]?4\d))(?:(?:[\s-]?(?:x|ext\.?\s?|\#)\d+)?)$^';
因此,您的代码应该如下所示:

<?php
$number = '0208 123-4567';
$number = '+44 20 8985 5577'; // or this
validateUsNumber($number);
function validateUsNumber($number)
{
    $pattern = '^\(?(?:(?:0(?:0|11)\)?[\s-]?\(?|\+)44\)?[\s-]?\(?(?:0\)?[\s-]?\(?)?|0)(?:\d{2}\)?[\s-]?\d{4}[\s-]?\d{4}|\d{3}\)?[\s-]?\d{3}[\s-]?\d{3,4}|\d{4}\)?[\s-]?(?:\d{5}|\d{3}[\s-]?\d{3})|\d{5}\)?[\s-]?\d{4,5}|8(?:00[\s-]?11[\s-]?11|45[\s-]?46[\s-]?4\d))(?:(?:[\s-]?(?:x|ext\.?\s?|\#)\d+)?)$^';
    $match = preg_match($pattern,$number);  
    if ($match != false)
    {
    echo " We have a valid UK phone number";
    }
    else
    {
    echo " We have an invalid UK phone number " ;
    }
}

这是取自,您可以在那里找到更多GB特定的电话号码验证。我使用了任何格式的1.1匹配GB电话号码。

您可以尝试改用此regexp:

$pattern = '^\(?(?:(?:0(?:0|11)\)?[\s-]?\(?|\+)44\)?[\s-]?\(?(?:0\)?[\s-]?\(?)?|0)(?:\d{2}\)?[\s-]?\d{4}[\s-]?\d{4}|\d{3}\)?[\s-]?\d{3}[\s-]?\d{3,4}|\d{4}\)?[\s-]?(?:\d{5}|\d{3}[\s-]?\d{3})|\d{5}\)?[\s-]?\d{4,5}|8(?:00[\s-]?11[\s-]?11|45[\s-]?46[\s-]?4\d))(?:(?:[\s-]?(?:x|ext\.?\s?|\#)\d+)?)$^';
因此,您的代码应该如下所示:

<?php
$number = '0208 123-4567';
$number = '+44 20 8985 5577'; // or this
validateUsNumber($number);
function validateUsNumber($number)
{
    $pattern = '^\(?(?:(?:0(?:0|11)\)?[\s-]?\(?|\+)44\)?[\s-]?\(?(?:0\)?[\s-]?\(?)?|0)(?:\d{2}\)?[\s-]?\d{4}[\s-]?\d{4}|\d{3}\)?[\s-]?\d{3}[\s-]?\d{3,4}|\d{4}\)?[\s-]?(?:\d{5}|\d{3}[\s-]?\d{3})|\d{5}\)?[\s-]?\d{4,5}|8(?:00[\s-]?11[\s-]?11|45[\s-]?46[\s-]?4\d))(?:(?:[\s-]?(?:x|ext\.?\s?|\#)\d+)?)$^';
    $match = preg_match($pattern,$number);  
    if ($match != false)
    {
    echo " We have a valid UK phone number";
    }
    else
    {
    echo " We have an invalid UK phone number " ;
    }
}
这是取自,您可以在那里找到更多GB特定的电话号码验证。我使用了1.1匹配GB电话号码的任何格式。

它将匹配以下内容:

02083) 123456
而不是这个:

0208 123-4567
因为一些原因

第二个括号是强制的,将\?02\d{3}\更改为\?02\d{3}\? 您保留了{3}并试图用两位数字匹配,请更改\?02\d{3}\?到\?02\d{2}\? 你没有把-hiphen包含在任何地方,所以很明显它不匹配。将最后一部分更改为\s?\d{3}-\s?\d{3}$。 您的示例在hiphen-4567之后有4个数字,因此将正则表达式的最后一部分更改为量词{4}。 因此,您的最终正则表达式应该如下所示:

^(\+44\s?7\d{3}|\(?07\d{3}\)|\(?02\d{3}\)?|\(?01\d{3}\)?)\s?\d{3}[-\s]?\d{4}$
这个正则表达式将符合您的需要 0208123-4567

建议从正则表达式检查中删除+ 此处演示:

它将与以下内容匹配:

02083) 123456
而不是这个:

0208 123-4567
因为一些原因

第二个括号是强制的,将\?02\d{3}\更改为\?02\d{3}\? 您保留了{3}并试图用两位数字匹配,请更改\?02\d{3}\?到\?02\d{2}\? 你没有把-hiphen包含在任何地方,所以很明显它不匹配。将最后一部分更改为\s?\d{3}-\s?\d{3}$。 您的示例在hiphen-4567之后有4个数字,因此将正则表达式的最后一部分更改为量词{4}。 因此,您的最终正则表达式应该如下所示:

^(\+44\s?7\d{3}|\(?07\d{3}\)|\(?02\d{3}\)?|\(?01\d{3}\)?)\s?\d{3}[-\s]?\d{4}$
这个正则表达式将符合您的需要 0208123-4567

建议从正则表达式检查中删除+
此处演示:

您的模式基本上是在寻找一个格式良好的数字,但它正在根据剥离非数字字符的结果进行测试。在此之后将永远不会有前导+44、空格或括号:

$number= preg_replace( '/[^0-9]/', '', $number);

您的模式基本上是在寻找一个格式良好的数字,但它正在根据剥离非数字字符的结果进行测试。在此之后将永远不会有前导+44、空格或括号:

$number= preg_replace( '/[^0-9]/', '', $number);

\如果有一个空格而不是连字符,s{3}-\s{4}就不起作用了。如果有一个空格而不是连字符,那么s{3}[-\s]?\d{4}@acarlon是的,这样会更好,也更不容易出错:\s?\d{3}-\s?\d{4}就不起作用了@acarlon是的,这将更好,更不容易出错:一个有趣的问题,一个潜在的可用性噩梦;如果你打算将此添加到网站,我的建议是不要。在大多数情况下,如果网站根据电话号码测试停止表单验证,则存在一个边缘情况,该情况下,一个有效但不允许的号码会导致用户沮丧地放弃流程/网站。而且,在许多情况下,根本不提供电话号码也可以。@halfer:我得到用户数据,需要验证号码。所以我需要它。你有什么要说的吗?我怎样才能让它工作得最好?你需要它,因为你需要它?嘿,一个递归的理由@根据我的经验,有些客户讨厌在他们的数据库中输入明显虚假的电话号码,比如000000000。他们更喜欢用随机有效数字填充假记录。可能的重复:一个有趣的问题,一个潜在的可用性噩梦;如果你打算将此添加到网站,我的建议是不要。在大多数情况下,如果网站根据电话号码测试停止表单验证,则存在一个边缘情况,该情况下,一个有效但不允许的号码会导致用户沮丧地放弃流程/网站。而且,在许多情况下,根本不提供电话号码也可以。@halfer:我得到用户数据,需要验证号码。所以我需要它。你有什么要说的吗?我怎样才能让它工作得最好?你需要它,因为你需要它?嘿,一个递归的理由@根据我的经验,有些客户讨厌在他们的数据库中输入明显虚假的电话号码,比如000000000。他们更喜欢用随机有效数字输入假记录。可能重复:您的验证器与数据不匹配,所以您更改了数据?老实说,我不确定你在想什么。你的验证器与数据不匹配,所以你更改了数据?老实说,我不确定你在想什么。