-3

我正在尝试检查给定的字符串是否包含在我的 $allowed 数组中未收听的单词。如果是这样,我希望它们用“”替换。

所以假设我的字符串包含“Hello World”并且“World”不在我允许的单词中,它应该用“”替换“World”。

我遇到的另一个问题是我当前的实现区分大小写。

$string = "Test new world";
$allowed = array('hello', 'test');
if(in_array($string, $allowed)) {
     
}
else {
    // Return false or Replace with ""
}
4

3 回答 3

1

我可以通过向您展示如何保留单词边界词,从字符串中删除所有其他内容来部分回答:

<?php

$input  = 'hotdogs are food, not actual HOT dogs.  The latter being dog animals that are hot.';

$words = 
[
    'hot',
    'dog'
];
$regex  = '@\b(' . implode($words, '|') . ')\b@i';
$output = '';
if(preg_match_all($regex, $input, $matches))
    $output = implode($matches[0]);

print $output;

输出:

HOTdoghot
于 2018-10-16T08:10:06.837 回答
0

在比较之前检查这两种情况是否都是大写或小写

$allowed = array('hello', 'test');

// Map every array element to be lowercase string
$lowercaseAllowed = array_map('strtolower', $allowed);

// Check if lower case version of data is in accepted lowercase array
if(in_array( strtolower($data), $lowercaseAllowed ) ) {
     //Do something
} else {
    return false;
}
于 2018-10-16T08:07:28.477 回答
0

使用您问题中的示例并假设 $data 是一个仅包含一个单词的字符串,您只需 strtolower($data)

如在

if(in_array(strtolower($data), $allowed)) {
于 2018-10-16T08:09:42.250 回答