Как я могу запретить некоторые ключевые слова при вводе пользователем - PullRequest
1 голос
/ 13 декабря 2010

Пример ввода пользователя, который должен быть запрещен:

  • Дом для sale
  • Автомобиль для rent
  • WTB iphone с дешевой ценой

Как мне сделать так, чтобы мой код запрещал ввод, как те, что указаны выше?

$title = array('rent','buy','sale','sell','wanted','wtb','wts');
$user_title = stripslashes($_POST['title']);
if (in_array($user_title, $title)) {
    $error = '<p class="error">Do not include ' . $user_title . ' on your title</p>';
}

Ответы [ 4 ]

4 голосов
/ 13 декабря 2010

Если вы хотите, чтобы ваши запрещенные слова были полными словами, а не просто частью другого слова, чтобы его считали запрещенным, вы можете использовать решение на основе регулярных выражений с границами слов:

// array of denied words.
$deniedWords = array('rent','buy','sale','sell','wanted','wtb','wts');

// run preg_quote on each array element..as it may have a regex meta-char in it.
$deniedWords = array_map('preg_quote',$deniedWords);

// construct the pattern as /(\bbuy\b|\bsell\b...)/i
$pat = '/(\b'.implode('\b|\b',$deniedWords).'\b)/i';

// use preg-match_all to find all matches
if(preg_match_all($pat,$user_title,$matches)) {

    // $matches[1] has all the found word(s), join them with comma and print.
    $error = 'Do not include ' . implode(',',$matches[1]);    
}

Ideone Link

1 голос
/ 13 декабря 2010

Вы можете использовать stripos():

$title = array('rent','buy','sale','sell','wanted','wtb','wts');
$user_title = stripslashes($_POST['title']);

foreach($title as $word)
{
    if (stripos($user_title, $word) !== false)
    {
        $error = '<p class="error">Do not include ' . $word . ' on your title</p>';
        break;
    }
}
0 голосов
/ 13 декабря 2010

Вы можете использовать explode () для разделения слов в $ user_title и проверки каждого из них, чтобы убедиться, что его нет в $ title.

$invalidWords = '';

$words = explode(' ', stripslashes($_POST['title']));
foreach($words as $word) {
    if (in_array($word, $title)) {
        $invalidWords .= ' ' . $word;
    }
}

if (!empty($invalidWords)) {
    echo '<p class="error">Do not include the following words in your title: ' . $invalidWords . '</p>';
}

RegEx, вероятно, лучше, но я не могу легко определить выражение, необходимое для того, чтобы вы могли выводить все недопустимые слова в списке для пользователя.

0 голосов
/ 13 декабря 2010

Вы также можете использовать регулярное выражение:

if (preg_match("/(rent|buy|sale|sell|wanted|wtb|wts)/is", $user_title)) {
    $error = '<p class="error">Do not include ' . $user_title . ' on your title</p>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...