cakephp 基于GB且仅数字电话号码的正则表达式

wz3gfoph  于 2022-11-12  发布在  PHP
关注(0)|答案(5)|浏览(142)

我想要一个正则表达式代码,只允许数字电话号码(如123. 456. 7890)以及GB格式的数字(如123-456-7890)。
此表达式必须对这两种条件都有效。
目前我正在使用下面的正则表达式,它只允许GB电话号码

/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/

我需要帮助,只允许数字的数字也。

vnzz0bqm

vnzz0bqm1#

有一些英国电话号码正则表达式here
该页面中评分最高的是:

^(((\+44\s?\d{4}|\(?0\d{4}\)?)\s?\d{3}\s?\d{3})|((\+44\s?\d{3}|\(?0\d{3}\)?)\s?\d{3}\s?\d{4})|((\+44\s?\d{2}|\(?0\d{2}\)?)\s?\d{4}\s?\d{4}))(\s?\#(\d{4}|\d{3}))?$

它被描述为:

Matches     +447222555555   | +44 7222 555 555 | (0722) 5555555 #2222
Non-Matches (+447222)555555 | +44(7222)555555  | (0722) 5555555 #22

就我个人而言,我不会在电话号码上设置严格的正则表达式,除非它绝对需要用户的实际电话号码用于身份验证或涉及支付的事情。电话号码有很多变化,一些用户甚至可以使用Skype作为他们的主要电话,通过设置验证,你只是要阻止/挫败用户。

另请注意,您输入的英国电话号码格式有误,英国电话号码应包含11位数字,格式通常为(01234)123123 -我们 * 从不 * 使用破折号,第一个数字应始终为0。

pvabu6sv

pvabu6sv2#

英国电话号码应包含11位数字
英国的电话号码通常有9或10位数,不包括0中继代码或+44国家代码。少数只有7位数。
并且通常采用(01234)123123格式
该示例显示了英国4+6格式号码。英国使用多种格式,包括用于地理号码的2+8、3+7、4+6、4+5、5+5和5+4,以及用于非地理号码的0+10、0+9和0+7。
以下网址提供了一个方便的列表:
http://www.aa-asterisk.org.uk/index.php/Number_format

以任何格式匹配英国电话号码

^(?:(?:\(?(?:0(?:0|11)\)?[\s-]?\(?|\+)44\)?[\s-]?(?:\(?0\)?[\s-]?)?)|(?:\(?0))(?:(?:\d{5}\)?[\s-]?\d{4,5})|(?:\d{4}\)?[\s-]?(?:\d{5}|\d{3}[\s-]?\d{3}))|(?:\d{3}\)?[\s-]?\d{3}[\s-]?\d{3,4})|(?:\d{2}\)?[\s-]?\d{4}[\s-]?\d{4}))(?:[\s-]?(?:x|ext\.?|\#)\d{3,4})?$

上面的模式允许用户以他们喜欢的任何格式输入数字。不要限制用户输入特定的格式。

提取NSN、前缀和分机号

^(\(?(?:0(?:0|11)\)?[\s-]?\(?|\+)(44)\)?[\s-]?)?\(?0?(?:\)[\s-]?)?([1-9]\d{1,4}\)?[\d[\s-]]+)((?:x|ext\.?|\#)\d{3,4})?$

如果使用国际格式,$2将为'44',否则采用国家格式
$4包含分机号码(如果存在)。
$3包含NSN部件。

验证和格式化

使用进一步的RegEx模式检查NSN是否具有此数字范围的正确位数。最后,以E.164格式存储该数字或以E.123格式显示该数字。
在以下位置有一个非常详细的英国数字验证和显示格式RegEx模式列表:
用于验证和格式化GB电话号码的正则表达式
由于篇幅太长,无法在此复制,而且很难保留此文档的多个副本。

fcy6dtqo

fcy6dtqo3#

一个更简单的版本:
^((\+44)|(0)) ?\d{4} ?\d{6}$

xqkwcwgp

xqkwcwgp4#

测试一个英国电话号码是一件很复杂的事情,因为不同省份的电话号码的格式是不同的。看看这个link,你自己就知道一个英国电话号码可以有多少种格式。
用途

^((((\(?0\d{4}\)?\s?\d{3}\s?\d{3})|(\(?0\d{3}\)?\s?\d{3}\s?\d{4})|(\(?0\d{2}\)?\s?\d{4}\s?\d{4}))(\s?\(\d{4}|\d{3}))?)|((\+44\s?7\d{3}|\(?07\d{3}\)?)\s?\d{3}\s?\d{3})|((((\+44\s?\d{4}|\(?0\d{4}\)?)\s?\d{3}\s?\d{3})|((\+44\s?\d{3}|\(?0\d{3}\)?)\s?\d{3}\s?\d{4})|((\+44\s?\d{2}|\(?0\d{2}\)?)\s?\d{4}\s?\d{4}))(\s?\(\d{4}|\d{3}))?$

使用regexlib.com中的信息创建
与正则表达式匹配的值:
01222五五五五五五|(010)5555555第2222号|0122 555 5555#222电话|07222五五五五五五|(07222)五五五五五五五|+44 7222 555 555|电话:+44722255555| +44 7222 555 555|(0722)5555555第2222号
与正则表达式不匹配的值:
01222五五五五五五|(010)5555555第22号|0122五五五五五五五五222|小行星7222 555555|电话:+44 07222 55555|(电话:+447222)555555|(+447222)555555| +44(7222)555555|(0722)5555555第22号

92dk7w1h

92dk7w1h5#

请注意,英国数字在+44、0或0044之后总是有10个数字,而不是上面所有的数字。(如果我错了请纠正我)
要避免这些庞大的正则表达式,您可以使用以下正则表达式

^(\+44\s?\d{10}|0044\s?\d{10}|0\s?\d{10})?$

沿着一个空格修剪器。

trimmedPhoneNumber= preg_replace('/\s+/', '', $phoneNumber);

相关问题