Php 需要匹配此示例中的所有单词变体

Php 需要匹配此示例中的所有单词变体,php,arrays,preg-match,Php,Arrays,Preg Match,这将标记单词博彩,赌博,xxx,但不会标记博彩,赌博,xxx 我希望它能够标记这些单词的所有变体(即:下注、下注、下注等)。显然,我可以单独列出它们,但我希望以某种方式匹配它们,以便标记这些单词的所有变体 $original = $_POST['message']; $spamw = array('betting', 'gambling', 'xxx'); foreach ($spamw as $num) { if (( $pos = strpos( $original, $num

这将标记单词
博彩
赌博
xxx
,但不会标记
博彩
赌博
xxx

我希望它能够标记这些单词的所有变体(即:下注、下注、下注等)。显然,我可以单独列出它们,但我希望以某种方式匹配它们,以便标记这些单词的所有变体

$original  = $_POST['message'];

$spamw = array('betting', 'gambling', 'xxx');

foreach ($spamw as $num) {
    if (( $pos = strpos( $original, $num )) !== false) { 
        $err = 'Something went wrong. Please, try again.';
    }
}
SOLOVED

$spamw = array('betting', 'gambling', 'xxx');
$original = $_POST['message'];

foreach ($spamw as $spamwords) {
  if (preg_match("/\b$spamwords\b/i", $original)) {
$err = 'Something went wrong. Please, try again.';
  }
}

好的,我用脑海中所有变化的0.1%更新解决方案:

<?php
function tospam($dictswrd){
    global $word;
    print('the imput is <span style="color:red">'.$word.'</span> compare to <span style="color:blue">'.$dictswrd.'</span> from Dictionary<br>');
    $pattern = '/(?<!\p{L})'.strtolower($word).'*/iu';
    return preg_match($pattern,$dictswrd ) >0;
}




$dictionary = array('betting', 'gambling', 'xxx'); //a small internal database loaded from a internal file maybe file?
/*
 eg:
$dictionary =file('spam_dictionary.txt');
internal you can drop a file 
spam_dictionary.txt :
---------------
betting
gambling
xxx
---------------
or you can fill the array of dictionary from a kind of database=any kind
*/

if(isset($_POST['message'])){
    print('<h1>FORM`s POST method 1</h1>');

    $word=$_POST['message'];//let's say that's coming from input from post
    $result_spam_or_not=array_filter($dictionary,'tospam' );
    print_r($result_spam_or_not);print('<hr>');

    $word=$_POST['message'];//let's say that's coming from input from post
    $result_spam_or_not=array_filter($dictionary,'tospam' );
    print_r($result_spam_or_not);print('<hr>');


    $word=$_POST['message'];//let's say that's coming from input from post
    $result_spam_or_not=array_filter($dictionary,'tospam' );
    print_r($result_spam_or_not);print('<hr>');

//or
print('<h1>FORM`s POST method 2</h1>');

$word=$_POST['message'];//let's say that's coming from input from post
$result_spam_or_not=array_filter($dictionary,'tospam' );
print(!empty($result_spam_or_not)? 'SPAM':'ok!');print('<hr>');



$word=$_POST['message'];//let's say that's coming from input from post
$result_spam_or_not=array_filter($dictionary,'tospam' );
print(!empty($result_spam_or_not)? 'SPAM':'ok!');print('<hr>');


$word=$_POST['message'];//let's say that's coming from input from post
$result_spam_or_not=array_filter($dictionary,'tospam' );
print(!empty($result_spam_or_not)? 'SPAM':'ok!');print('<hr>');


//or
print('<h1>FORM`s POST method 3</h1>');

$word=$_POST['message'];//let's say that's coming from input from post
$result_spam_or_not=array_filter($dictionary,'tospam' );
if(!empty($result_spam_or_not))print('spam');else print('not a spam');print('<hr>');



$word=$_POST['message'];//let's say that's coming from input from post
$result_spam_or_not=array_filter($dictionary,'tospam' );
if(!empty($result_spam_or_not))print('spam');else print('not a spam');print('<hr>');


$word=$_POST['message'];//let's say that's coming from input from post
$result_spam_or_not=array_filter($dictionary,'tospam' );
if(!empty($result_spam_or_not))print('spam');else print('not a spam');print('<hr>');

}


print('<h1>method 1</h1>');

$word='Gambling';//$word=$_POST['message'];//let's say that's coming from input from post
$result_spam_or_not=array_filter($dictionary,'tospam' );
print_r($result_spam_or_not);print('<hr>');

$word='gambling';//$word=$_POST['message'];//let's say that's coming from input from post
$result_spam_or_not=array_filter($dictionary,'tospam' );
print_r($result_spam_or_not);print('<hr>');


$word='blablabla';//$word=$_POST['message'];//let's say that's coming from input from post
$result_spam_or_not=array_filter($dictionary,'tospam' );
print_r($result_spam_or_not);print('<hr>');


//or
print('<h1>method 2</h1>');

$word='Gambling';//$word=$_POST['message'];//let's say that's coming from input from post
$result_spam_or_not=array_filter($dictionary,'tospam' );
print(!empty($result_spam_or_not)? 'SPAM':'ok!');print('<hr>');



$word='gambling';//$word=$_POST['message'];//let's say that's coming from input from post
$result_spam_or_not=array_filter($dictionary,'tospam' );
print(!empty($result_spam_or_not)? 'SPAM':'ok!');print('<hr>');


$word='blablabla';//$word=$_POST['message'];//let's say that's coming from input from post
$result_spam_or_not=array_filter($dictionary,'tospam' );
print(!empty($result_spam_or_not)? 'SPAM':'ok!');print('<hr>');


//or
print('<h1>method 3</h1>');

$word='Gambling';//$word=$_POST['message'];//let's say that's coming from input from post
$result_spam_or_not=array_filter($dictionary,'tospam' );
if(!empty($result_spam_or_not))print('spam');else print('not a spam');print('<hr>');



$word='gambling';//$word=$_POST['message'];//let's say that's coming from input from post
$result_spam_or_not=array_filter($dictionary,'tospam' );
if(!empty($result_spam_or_not))print('spam');else print('not a spam');print('<hr>');


$word='blablabla';//$word=$_POST['message'];//let's say that's coming from input from post
$result_spam_or_not=array_filter($dictionary,'tospam' );
if(!empty($result_spam_or_not))print('spam');else print('not a spam');print('<hr>');


?><form method="post" action="">
    spam!<input type="text" name="message" value="Gambling"><input type="submit">
</form>
<form method="post" action="">
    spam!<input type="text" name="message" value="gambling"><input type="submit">
</form>
<form method="post" action="">
    not a spam!<input type="text" name="message" value="blablabla"><input type="submit">
</form>

一种方法是像现在这样将
$spamw
数组中的所有单词存储为小写,然后使用PHP
strtolower()
函数将任何用户输入转换为小写字符。然后,您的PHP脚本可以将用户输入与存储在
$spamw
数组中的值进行比较,检查是否有任何单词匹配。

只需使用函数,该函数将查找不区分大小写的子字符串第一次出现的位置,请看,这只是您想要捕捉的案例差异,而不是
strpos

?将
strpos
更改为
stripos
@MrK ok
i
wink-wink仍然认为你应该在preg_-match上要求一个不区分大小写的选项。顺便说一句,我的问题不同(对于在另一个线程中标记为已回答的人)。在我的例子中,$_POST['message']是由用户提交的,可能有各种各样的变体(以及其他垃圾邮件)。我需要知道在我现有的示例中可以做些什么来匹配它们,即使我的数组中的所有垃圾邮件都是小写的。U hv将所有内容都存储为小写。为什么不将用户的输入转换为小写,然后进行比较P不确定这对我原来的问题有何帮助。我会回来看preg_match示例我做了更新。我会发布此消息,以防您无法收到我修改解决方案最简单的解决方案是:$spamw=array('Botting','Bogging','xxx')$原始=$_POST['message'];foreach($spamwords$spamwords){if(preg_match(“/\b$spamwords\b/i,$original)){$err='出了点问题,请再试一次。;}}你的意思是:$original=strtolower('$_POST[message]');谢谢@jamiemgg$original=strtolower($_POST['message']);这正是我所需要的。是的,像这样的东西可能对你想要完成的事情有用。如果您愿意,您甚至可以创建另一个变量来存储转换为小写的文本,前提是它有助于保持组织。