如何检测字符串是否以数组中的值结尾?
array('.1.jpg','.2.jpg','.3.jpg','.4.jpg','.5.jpg','.6.jpg','.7.jpg','.8.jpg','.9.jpg');
字符串可以是:image.1.jpg,也可以是image.11.jpg但是我只需要在字符串以1结尾的情况下找到数组中的值。
image.1.jpg
image.11.jpg
gr8qqesn1#
如果需要使用字符串中的所有句点,那么只需获取从第一个句点到结尾的所有内容,并查看它是否在数组中:
if(in_array(strstr($string, '.'), $array)) { //yes }
显然,像my.image.1.jpg这样的东西会失败,因为它会查找.image.1.jpg。
my.image.1.jpg
.image.1.jpg
7eumitmz2#
一个很好的老解决方案,它也给你在数组中找到的索引:
function endsBy(string $str, array $arr): ?int { $len = strlen($str); foreach ($arr as $i => $toTest) { $toTestLen = strlen($toTest); if ($toTestLen <= $len && substr_compare($str, $toTest, $len - $toTestLen) === 0) { return $i; } } return null; }
如您的问题中所述使用它:
if (endsBy($myString, $array) !== null) { ... }
whitzsjs3#
if (in_array(substr($string, -6), $array)) { //yes }
因为所有的例子都有相同的长度。无需REGEX或更换。
72qzrwbm4#
我也遇到过类似的情况。在我的例子中,我想测试文件名是否以给定的扩展名之一结束。allowedExtensions可以传递给函数或定义为常量。将来也可能会发生变化。我是这样写的:
const allowedExtensions = ['.docx', '.jpg', '.txt', '.csv']; const isAllowed = allowedExtensions.some((ext) => filename.endsWith(ext));
4条答案
按热度按时间gr8qqesn1#
如果需要使用字符串中的所有句点,那么只需获取从第一个句点到结尾的所有内容,并查看它是否在数组中:
显然,像
my.image.1.jpg
这样的东西会失败,因为它会查找.image.1.jpg
。7eumitmz2#
一个很好的老解决方案,它也给你在数组中找到的索引:
如您的问题中所述使用它:
whitzsjs3#
因为所有的例子都有相同的长度。无需REGEX或更换。
72qzrwbm4#
我也遇到过类似的情况。在我的例子中,我想测试文件名是否以给定的扩展名之一结束。allowedExtensions可以传递给函数或定义为常量。将来也可能会发生变化。
我是这样写的: