带有计数位

时间:2015-11-15 15:54:36

标签: php regex

这是我的代码

<?php
    $str='salamsalam';
    echo preg_match('/salam{1,1}/',$str);
?>

我用正则表达式写一次min和max,但我不知道为什么打印1(true),

还有一个问题:

我想接受正好4位数(不多也不少)现在我的代码在这里:

<?php
    $num=234567 ;
    echo preg_match('/[0-9]{4,4}/',$num); 
?>

这不正确,也接受234567。

2 个答案:

答案 0 :(得分:3)

<强>问题

你的正则表达式在两种情况下都是正确的。

问题是,如果找到任何匹配项,preg_match()会返回true - 如果找到多个匹配项,那么它仍会显示为true。

<强>解

您可以添加^以匹配开头,$以匹配正则表达式中的结尾,以便它匹配整个字符串(或不匹配)。

/^salam$/
/^[0-9]{4}$/

答案 1 :(得分:1)

这两个表达式中的问题是您只是在文本中匹配某处。如果您想确保在与表达式匹配之前和之后没有任何内容,则需要在其中包含开始和结束标记:

<?php
$str = 'salamsalam';
echo preg_match('/^salam$/', $str);

<?php
$num = 234567;
echo preg_match('/^[0-9]{4}$/', $num);

请注意,如果您希望完全匹配特定次数,则无需使用{min,max}。然后你可以使用{num}。如果你只想匹配一次,你不需要添加任何说明符。