preg_match不起作用

时间:2014-03-11 12:44:19

标签: php preg-match

此脚本检查是否有特殊字符,如果有,则调用preg match的“Invalid”函数,否则显示用户名可用。这里发生的是每次我写一个特殊的角色,如#@%^&它仍然说用户名可用而不是说无效,这不是它应该如何工作。我已经检查了PHP代码的错误,它似乎很干净。我已经尝试过并在论坛上运行一切,但找不到解决方案。您的贡献将受到如此多的赞赏!

if(isset($_POST['login'])) {
    $login = mysql_real_escape_string($_POST['login']);

    if(!empty($login)) {

        $login_query = mysql_query("SELECT COUNT(`id`) FROM `account` WHERE `login` = '$login'");
        $login_result = mysql_result($login_query,0);

        if($login_result == 0) {
           echo 'yes';
        } else {
           echo 'no';
        } 
    } 
 }

 if ( preg_match("/^[a-zA-Z0-9[:space:]]+$/" , $login) )  {
    echo 'noinput'; 
 }

PS我不是一个从互联网上获取代码并试图让其他人为他做的工作的孩子,我写了70%的这个脚本并且除了特殊字符之外它工作得很好我很困惑。我希望你能帮助我。谢谢!

2 个答案:

答案 0 :(得分:2)

不确定您的问题是什么。我刚写了以下程序:

<?php

$input="good string";
$input2="bad@string";

if (preg_match("/^[a-zA-Z0-9[:space:]]+$/",$input2)) {
  echo $input2." matches\n";
}
else {
  echo $input2." does not match\n";
}
if (preg_match("/^[a-zA-Z0-9[:space:]]+$/",$input)) {
  echo $input." matches\n";
}
else {
  echo $input." does not match\n";
}

它正确显示$input匹配,但$input2不匹配。

您确定输入内容是什么吗?可以回车吗?

更新我认为这只是你错误解释php脚本的返回值的情况。我们来看看选项:

1)有效的用户名,可用:
查询为空,打印字符串“是”。 preg_match找到匹配并打印“noinput”。

2)有效的用户名,不可用:
查询返回一些东西,打印字符串“否”。 preg_match打印“noinput”

3)用户名无效,可用:
查询为空,打印字符串“是”。 preg_match没有打印任何内容。

4)用户名无效,不可用:
查询返回一些内容,打印字符串“no”。 preg_match什么都不打印。

如果这不是您解释返回值的方式,那就是您的问题......

第二次更新

我刚刚查看了链接的源代码,这确实是问题所在。您似乎测试了几种不同的响应:

  if(data=='no') {
    // do stuff
  } else {
    // something else
    });
  }
  if(data=='noinput') {
    // more stuff
    });
  }
  if(data=='invalid') {
    // yet more stuff
  });

换句话说,您检查字符串'yes', 'no', 'noinput'。但是你的代码的结构和运行方式,这不是你产生的输出。我建议你参考上面的四个案例。

<强>溶液

您需要将检查无效输入的内容移到代码中的前面;并且您需要在找到不匹配的用户名后立即返回。我认为以下内容可行:

if(isset($_POST['login'])) {
    $login = mysql_real_escape_string($_POST['login']);

    if ( preg_match("/^[a-zA-Z0-9[:space:]]+$/" , $login) )  
    {

        $login_query = mysql_query("SELECT COUNT(`id`) FROM `account` WHERE `login` = '$login'");
        $login_result = mysql_result($login_query,0);

        if($login_result == 0) 
        {
           echo 'yes';
        } 
        else 
        {
           echo 'no';
        } 
    }
    else
    {
       echo('noinput');
    }
 }

答案 1 :(得分:0)

它不会出现特殊字符的正则表达式帐户。您需要在数字和alpha之外添加要捕获的字符。

在这里寻求一些建议:http://www.regular-expressions.info/characters.html

尝试/^[a-zA-Z0-9\$[:space:]]+$/

之类的内容

\$说明文字字符。