str_replace只包含整个单词

时间:2014-10-20 04:45:17

标签: php mysql regex preg-replace

我正在尝试获取字符串,删除单词列表和任何数字,然后在MySQL查询中使用结果。

它会回显我试图隔离的单词,但是当我将该单词等同于该字符串时,它将返回false并且不会查询。

$remove_odonyms=preg_replace("/\b(st|street|rd|road|ln|lane|ter|terrace|ave|avenue|blvd|boulevard|ct|court)\b/", "", $search);

function remove_numbers($string) {
$num = array(1,2,3,4,5,6,7,8,9,0);
return str_replace($num, '', $string);
}
$street_only=remove_numbers($remove_odonyms);

因此字符串$search="60 main street" echo $remove_odonyms"60 main"echo $street_only"main"

但是他们不会查询,他们也不会这样做

if($street_only="main"){ echo "true";}

编辑:我正在进行的查询是

$query="
SELECT * FROM column WHERE number='$int' AND odonym='$odonym' AND street_name='$street_only'
";

它什么都不返回。但当我将其更改为street_name="main"时,它会返回我要查找的结果。

4 个答案:

答案 0 :(得分:1)

您有一个额外的空间,因此您需要修剪以移除空间。所以在查询之前使用trim()删除空格并匹配查询中的确切单词。

$street_only = trim($street_only);

答案 1 :(得分:0)

如果你想过滤掉一点,你可以做几件事:

// Case sensitive string (you may or may not have a upper/lower, but the function is here to see both...)
$search         =   '16 Main Street';
// added case insensitive on the chance there are uppers
$remove_odonyms =   preg_replace("/\b(st|street|rd|road|ln|lane|ter|terrace|ave|avenue|blvd|boulevard|ct|court)\b/i", "", $search);

function remove_numbers($string) {
        // remove all numbers
        return trim(preg_replace('/[0-9]/','',$string));
    }
// Presumming you are storing all lower, force lowercase
// This will echo "main"
$street_only    =   strtolower(remove_numbers($remove_odonyms));

答案 2 :(得分:0)

$textString ="tim timtim lovetim hitim wholetim byetimbye";
$text = preg_replace('/\btim\b/', 'pankaj', $textString);
echo $text; 

答案 3 :(得分:0)

你要离开你自己开放sql注入,顺便说一句....你可以看到,有很多方法可以做到这一点..

<?php

$str = '120 taco bell bvld. 123';  

$str = preg_replace('/[^a-zA-z ]/','',$str);
$str = str_ireplace(array('street','road','rd','ct','court','bvld'),'',$str); 
$str = trim($str); 

$arr = preg_split('/\s/',$str);

$just_street = join(' ',$arr);

print $just_street; 

?>