Php 检查字符串是否包含某个数字

Php 检查字符串是否包含某个数字,php,regex,Php,Regex,我有一根绳子 8,7,13,14,16 确定该字符串中是否存在给定数字的最简单方法是什么 $numberA = "13"; $string = "8,7,13,14,16"; if($string magic $numberA){ $result = "Yeah, that number is in there"; } else { $result = "Sorry."; } 寻找魔法。 <?php in_array('13', explode(',', '8,7,13,14,16

我有一根绳子

8,7,13,14,16
确定该字符串中是否存在给定数字的最简单方法是什么

$numberA = "13";
$string = "8,7,13,14,16";

if($string magic $numberA){
$result = "Yeah, that number is in there";
} else {
$result = "Sorry.";
}
寻找魔法。


<?php 
in_array('13', explode(',', '8,7,13,14,16'));
?>
…将返回字符串中是否包含“13”

详细说明一下:explode将字符串转换为一个数组,在本例中,在每个“,”处将其拆分。然后,in_数组检查字符串“13”是否在结果数组的某个位置

if (strpos(','.$string.',' , ','.$numberA.',') !== FALSE) {
    //found
}

请注意guard“,”chars,它们将有助于处理“13”magic“1,2,133”的情况。

如果您只是检查字符串的存在性,则可以进行简单的字符串搜索。我不会说php,但我认为这是可以做到的

$mystring = '8,7,13,14,16';
$findme   = '13';

if (preg_match('/(?>(^|[^0-9])'.$findme.'([^0-9]|$))/', $mystring)) {
    $result = "Yeah, that number is in there";
} else {
    $result = "Sorry.";
}

另一种可能对laaaarge字符串更有效的方法是使用regexp:

$numberA = "13";
$string = "8,7,13,14,16";

if(preg_match('/(^|,)'.$numberA.'($|,)/', $string)){
    $result = "Yeah, that number is in there";
} else {
    $result = "Sorry.";
}

确保匹配字符串中的完整数字,而不仅仅是其中的一部分

function numberInList($num, $list) {
    return preg_match("/\b$num\b/", $list);
}
$string = "8,7,13,14,16";    
numberInList(13, $string); # returns 1
numberInList(8, $string); # returns 1
numberInList(1, $string); # returns 0
numberInList(3, $string); # returns 0

只需详细说明:
explode
将字符串转换为一个数组,在本例中,在每个“,”处将其拆分。然后,\u数组中的
检查字符串“13”是否在结果数组中的某个位置。这样做效果太好了,如果主题是13,则返回true,并且目标包含1或3,而不仅仅是整个主题本身。不,patrick,不会。像这个答案中那样分解样本字符串,生成数组
数组('8','7','13','14','16')
。简单的搜索是不够的。13是113的一部分:)看瓦瓦的答案,了解正确的方法=)哦,是的,我想不起来了。嗯,那么我猜爆炸技术的答案或者使用正则表达式会更快way@Jass,两者都可能较慢,但explode看起来更好,更易于维护。Regexp通常很慢,explode将创建并迭代数组。另外,可以预先添加保护,使其速度更快:)另一方面,原始字符串可以预先转换为关联数组,这是最快的方法。但是在最后,如果数字后面没有逗号呢?这就是为什么我还在haystack字符串中添加了逗号:)很好。不知怎的,我从来没有想到在原始字符串上加一个逗号。我用了一个正则表达式:你自己说过:“13是113的一部分,
13,
113,
的一部分。就像我第一次提交的一样,如果最后一个数字是113,这将失败。Concat在每个字符串的开头加一个逗号以修复=),它也将匹配
1,2113
。vava的方法可能快一点。如果您熟悉正则表达式,我的可能更容易解释,因为它描述了我们接受的内容,而不是更改输入。