我想验证电话号码。唯一有效的电话号码如下所示: +36 20 | +36 30 | +36 31 | +36 70
我的代码看起来像这样,但现在你可以输入+36 21或+36 71我想避免。如何查看两位数字?像70或30。
$phone = '+36 70 123 4567';
if ( preg_match( '|^\+36 [237][01] [1-9][0-9]{2} [0-9]{2}[0-9]{2}$|', $phone ) ) {
echo 'phone number is good';
}
答案 0 :(得分:3)
如果你想要一些非常具体的数字:
[237][01]
使用集合表示法( <div class="firstPart">
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Gustoso</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Welcome<span class="sr-only">(current)</span></a></li>
<li><a href="#">Menu</a></li>
<li><a href="#">Reservation</a></li>
<li><a href="#">News</a></li>
<li><a href="#">Contact</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><i class="fa fa-twitter"></i></li>
<li><i class="fa fa-twitter"></i></li>
<li><i class="fa fa-twitter"></i></li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
</div> <!--.firstPart-->
<section class="headerArea">
<h1>Pastry With Love</h1>
</section><!--.headerArea-->
)将开辟太多其他可能性,如您所观察到的。
答案 1 :(得分:1)
您可以使用非捕获组来指定您需要允许的值:
^\+36 (?:[237]0|31) [1-9][0-9]{2} [0-9]{4}$
请参阅regex demo
[237][01]
(两个连续的字符类)匹配2
或3
或7
,后跟0
或{{ 1}},而1
与(?:[237]0|31)
,2
,3
以及7
或0
字符序列匹配。
整个模式匹配:
31
- 开始搅拌^
- +36
和空格+36
- 请参阅上面的说明(?:[237]0|31)
- space
- 匹配单个数字rom [1-9]
到1
的字符类(不包括9
)0
- 任意2位ASCII数字(从[0-9]{2}
到0
)9
- space
- 4位数[0-9]{4}
- 字符串结束。请注意,您可以使用匹配任何空格的$
代替文字空格,并匹配1或0次出现(如果空格是可选的),您可以添加\s
(或{{1在?
- *
/ \s
之后匹配0次出现次数。
答案 2 :(得分:1)
$re = '/\+36\s(20|30|31|70)\s.*/';
$str = '+36 20 4145654';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
var_dump($matches);
在这里,我使用\s
来匹配所有空格字符。当然你也可以像这样使用空格字符:
$re = '/\+36 (20|30|31|70) .*/';