带+符号的正则表达式

时间:2012-02-24 10:56:47

标签: php regex

我正在使用此代码验证字符串。

$countrecipient ='0123456789';

preg_match('/^[0]{1}[1]{1}[0-9]{1}[0-9]{7}?$/', $countrecipient)

如果我想验证数字前面是否包含“+”符号怎么办?

如:

$countrecipient ='+0123456789';

仍然需要验证字符串的其余部分。

我试过了:

 if(preg_match('/^[+]{1}[6]{1}[0]{1}[1]{1}[0-9]{1}[0-9]{7}?$/', $countrecipient))
 {
   echo "Ok";
 }
 else
 {
   echo "Error";
 }

它适用于我的电脑,但我不确定为什么我的客户抱怨它显示他错误。

谢谢。

5 个答案:

答案 0 :(得分:1)

对于前面的可选加号,您可以使用:

preg_match('/^\+?[0]{1}[1]{1}[0-9]{1}[0-9]{7}?$/', $countrecipient);

请注意我是如何使用反斜杠转义+的?这是因为它是一个正则表达式关键字,意味着1个实例或更多。

答案 1 :(得分:1)

$countrecipient ='0123456789';
preg_match('/^[0]{1}[1]{1}[0-9]{1}[0-9]{7}?$/', $countrecipient) 

你让事情变得不必要地变得复杂。 “[0] {1} [1] {1} [0-9] {1}”简化为“01 [0-9]”。

要在前面加上一个可选的+,你使用[+]的基本想法应该有效。我们看看......

$countrecipient ='+0123456789';
if(preg_match('/^[+]{1}[6]{1}[0]{1}[1]{1}[0-9]{1}[0-9]{7}?$/', $countrecipient))

...这可以简化,但它简化为/^[+]601[0-9][0-9]{7}?$/6之后的+来自哪里?这会解决您的问题吗?

答案 2 :(得分:1)

Plus在PCRE中具有特殊含义,称为quantifier,含义为{1,}

您可以加入字符组规范,例如[+],其字面意思是one of following characters: array( '+'),或者使用\转义它,这样您就可以获得:\+。< / p>

同样添加{1}是隐式的,您不必在一个字符后添加它。如果您正在执行此匹配foo,则看起来像f{1}o{1}o{1},嗯f{1}o{2}而不是foo:)

如果您想同时匹配0123456789 +012345678,则应使用具有“快捷方式”{0,1}的{​​{1}}。比你的模式看起来像:?。我猜测您想要的正则表达式是:

/\+?/

答案 3 :(得分:1)

正则表达式的简化形式是

/\+?01[0-9]{8}/

但我建议您使用intvalis_intctype_digit来完成此操作。

if(intval($str)<=100000000){
    // found it.
}

答案 4 :(得分:1)

根据正则表达式,你输入你试过的部分:“... preg_match('/ ^ [+] {1} [6] {1} [0] {1} [1] {1} [0- 9] {1} [0-9] {7}?$ /” ...“

如果您要验证字符串并检查是否有“+”,您可以使用以下内容:

if(preg_match('/(\+)?6011[0-9][0-9]{7}?$/', $countrecipient, $matches)) 
{
   if ($matches[1] == '+') {

      echo "Ok WITH PLUS";
   } else {
      echo "Ok without PLUS"; 
   }
}
else
{
   echo "Error";
}