Php 验证英国电话号码,包括其区号
我已经编写了可以从diff线程获得的regex组合来验证英国数字 根据regex,应验证编号0208123-4567。但事实并非如此。问题是什么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-
您可以尝试改用此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。他们更喜欢用随机有效数字输入假记录。可能重复:您的验证器与数据不匹配,所以您更改了数据?老实说,我不确定你在想什么。你的验证器与数据不匹配,所以你更改了数据?老实说,我不确定你在想什么。