搜索未使用正则表达式的空格

时间:2015-07-23 20:12:57

标签: php regex

所以我试图在我的搜索字符串中包含空格我不熟悉使用正则表达式,所以我只需要一点指导:

if(preg_match("/^[A-Za-z]+(\s[A-Za-z]+)*$/", $_POST['name'])){

我知道\s是为我提供的,但我只能搜索没有字符的字符串?

if (preg_match("^(?i)[a-z\s]+$", $_POST['name'])) {    
    $name = $_POST['name'];

    $q = "SELECT *
        FROM users 
        WHERE first_name 
        LIKE '%" . $name .  "%' 
        OR last_name LIKE '%" . $name ."%' OR email LIKE '%" . $name ."%'";

    $r = mysqli_query($dbc, $q);

    while($row = mysqli_fetch_array($r)) {
          $FirstName = $row['first_name'];
          $LastName = $row['last_name'];
          $Email = $row['email'];
          $Extension = $row['extension'];
          $ID = $row['user_id'];

          echo "<ul>\n";
          echo "<li>" .$FirstName . " " . $LastName .  " " . $Email . " " . $Extension . "</a></li>\n";
          echo "</ul>";         
    }
}

1 个答案:

答案 0 :(得分:1)

所以你的当前进程正则表达式是正确的你的SQL不是。假设你有$name = 'john smith';。将其放入您的查询中,看看会发生什么。

SELECT *
    FROM users 
    WHERE first_name 
    LIKE '%john smith%' 
    OR last_name LIKE 'john smith%' OR email LIKE '%john smith%'

名字与john smith不同,姓氏不像john smith,电子邮件不像john smith

名字可能类似john,姓氏可能类似smith。所以也许在白色空间上分开。因此,您可以看到没有找到匹配项

无论如何

if(preg_match('/^(?i)[a-z\s]+$/', $_POST['name'])){

是对的。

更新

这个答案的改编,MySQL select with CONCAT condition,我认为这将是最好的方法。

$q = "SELECT *
      FROM users 
      WHERE CONCAT(first_name, ' ', last_name)
      LIKE '%" . $name . "%' or email LIKE '%" . $name . "%'";