$email = $_POST["email"];
if(preg_match("[@{1}]",$email))
echo "There is only one @ symbol";
if(preg_match("[@{2,}]",$email))
echo "There is more than one";
这很简单我的问题,但由于我很少使用正则表达式,输出不会按照我想要的方式出现。另外$ email是帖子数据。
如果$ email有2个或更多@符号,那么它将显示有多个。如果$ email有1个@symbol,那么它将显示只有1个@符号。够容易吗?
答案 0 :(得分:3)
您的第一个表达式将匹配一个@
;它永远不会说它必须是唯一的一个。
您的第二个表达式将匹配两个或更多连续的 @
符号。当你有两个由其他东西分隔时,它不会检测到这种情况。
您需要将“仅一个”或“多个”的概念转换为与regexp兼容的术语:
“只有一个”:一个@
被非@
所包围:^[^@]*@[^@]*$
“多个”:两个@
被任何内容隔开:@.*@
和“任何但只有一个”(即0,2,3,4 ......)的相关且有用的概念仅仅是对第一个的否定(即!preg_match('/^[^@]*@[^@]*$/', $email)
)
答案 1 :(得分:1)
我建议使用explode
和count
:
if (count(explode('@', $email)) > 2) {
//here you have 2 or more
}
您想要实现的目标是什么?您真的想知道其中是否只有一个@
,还是要验证整个电子邮件地址?如果您想验证它,请查看此帖子:Modify regex to validate email?
答案 2 :(得分:0)
you need to enclose your regex in delimiters like forward slash(/) or any other char.
$email = $_POST["email"];
if(preg_match("/[@{1}]/",$email))
echo "There is only one @ symbol"."</br>";
//you have to use preg_match_all to match all chars because preg_match will stop at first occurence of match.
if(preg_match_all("/(\w*@)/",$email,$matches)){ //\w matches all alphanumeric chars, * means 0 or more occurence of preceeding char
echo "There is more than one"."</br>";
print_r($matches);} //$matches will be the array of matches found.
?>