需要匹配此示例中的所有单词变体
Need to match all word variations in this example
这将标记单词 betting
、gambling
、xxx
,但不会标记 Betting
、Gambling
、XXX
.
我希望它能标记这些词的所有变体(即 Betting、BEttinG、BETTING 等)。显然,我可以单独列出它们,但我想以某种方式匹配它们,以便标记这些词的所有变体。
$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.';
}
}
已解决
$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
数组中的值进行比较,检查是否有任何单词恰好匹配。
简单地使用stripos函数,它找到不区分大小写的子字符串第一次出现的位置,而不是strpos
。
这将标记单词 betting
、gambling
、xxx
,但不会标记 Betting
、Gambling
、XXX
.
我希望它能标记这些词的所有变体(即 Betting、BEttinG、BETTING 等)。显然,我可以单独列出它们,但我想以某种方式匹配它们,以便标记这些词的所有变体。
$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.';
}
}
已解决
$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
数组中的值进行比较,检查是否有任何单词恰好匹配。
简单地使用stripos函数,它找到不区分大小写的子字符串第一次出现的位置,而不是strpos
。