我正在使用此代码验证字符串。
$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";
}
它适用于我的电脑,但我不确定为什么我的客户抱怨它显示他错误。
谢谢。
答案 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}/
但我建议您使用intval,is_int,ctype_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";
}