stristr()
(PHP 4, PHP 5, PHP 7)
strstr()函数的忽略大小写版本
说明
stristr(string $haystack, mixed $needle[,bool $before_needle= FALSE
] ): string
返回$haystack字符串从$needle第一次出现的位置开始到结尾的字符串。
参数
- $haystack
在该字符串中查找。
- $needle
如果$needle不是一个字符串,那么它将被转换为整型并被视为字符顺序值。
- $before_needle
若为
TRUE
,strstr()将返回$needle在$haystack中的位置之前的部分(不包括 needle)。
参数$needle和$haystack将以不区分大小写的方式对待。
返回值
返回匹配的子字符串。如果$needle未找到,返回FALSE
。
更新日志
版本 | 说明 |
---|---|
5.3.0 | 新增可选的$before_needle参数。 |
4.3.0 | stristr()变为二进制安全的。 |
范例
Example #1stristr()范例
<?php $email = 'USER@EXAMPLE.com'; echo stristr($email, 'e'); // 输出 ER@EXAMPLE.com echo stristr($email, 'e', true); // 自 PHP 5.3.0 起,输出 US ?>
测试字符串的存在与否
<?php $string = 'Hello World!'; if(stristr($string, 'earth') === FALSE) { echo '"earth" not found in string'; } // 输出: "earth" not found in string ?>
使用非字符串 needle
<?php $string = 'APPLE'; echo stristr($string, 97); // 97 = 小写字母 a // 输出: APPLE ?>
注释
Note:此函数可安全用于二进制对象。
参见
strstr()
查找字符串的首次出现strrchr()
查找指定字符在字符串中的最后一次出现stripos()
查找字符串首次出现的位置(不区分大小写)strpbrk()
在字符串中查找一组字符的任何一个字符preg_match()
执行匹配正则表达式
There was a change in PHP 4.2.3 that can cause a warning message to be generated when using stristr(), even though no message was generated in older versions of PHP. The following will generate a warning message in 4.0.6 and 4.2.3: stristr("haystack", ""); OR $needle = ""; stristr("haystack", $needle); This will _not_ generate an "Empty Delimiter" warning message in 4.0.6, but _will_ in 4.2.3: unset($needle); stristr("haystack", $needle); Here's a URL that documents what was changed: http://groups.google.ca/groups?selm=cvshholzgra1031224321%40cvsserver
Just been caught out by stristr trying to converting the needle from an Int to an ASCII value. Got round this by casting the value to a string. <?php if( !stristr( $file, (string) $myCustomer->getCustomerID() ) ) { // Permission denied } ?>
An example for the stristr() function: <?php $a = "I like php"; if (stristr("$a", "LikE PhP")) { print ("According to \$a, you like PHP."); } ?> It will look in $a for "like php" (NOT case sensetive. though, strstr() is case-sensetive). For the ones of you who uses linux.. It is similiar to the "grep" command. Actually.. "grep -i".
<?php function stristr_reverse($haystack, $needle) { $pos = stripos($haystack, $needle) + strlen($needle); return substr($haystack, 0, $pos); } $email = 'USER@EXAMPLE.com'; echo stristr_reverse($email, 'er'); // outputs USER ?>
I think there is a bug in php 5.3 in stristr with uppercase Ä containing other character http://pastebin.com/5bP6uztY if you search only with täry it works, but as soon as the word is tärylä it does not. TÄRYL works fine
Active item item in menu: <?php function aim($page) { if(stristr($_SERVER['REQUEST_URI'], $page)) { return ' class="active"'; } } ?> usage: <style type="text/css"> .active {color:red;} </style> <?php print '<a href="http://example.com/page/hello-world/"'. aim('hello-world') .'>HW</a>'; ?>
Beware the example given here: if stristr($message,'viagra') or stristr($message,'cialis') ) { die(); } stristr does not search for words, it finds matching substrings. So, for example, the check for 'cialis' will trigger on 'specialist'
handy little bit of code I wrote to take arguments from the command line and parse them for use in my apps. <?php $i = implode(" ",$argv); //implode all the settings sent via clie $e = explode("-",$i); // no lets explode it using our defined seperator '-' //now lets parse the array and return the parameter name and its setting // since the input is being sent by the user via the command line //we will use stristr since we don't care about case sensitivity and //will convert them as needed later. while (list($index,$value) = each($e)){ //lets grap the parameter name first using a double reverse string // to get the begining of the string in the array then reverse it again // to set it back. we will also "trim" off the "=" sign $param = rtrim(strrev(stristr(strrev($value),'=')),"="); //now lets get what the parameter is set to. // again "trimming" off the = sign $setting = ltrim(stristr($value,'='),"="); // now do something with our results. // let's just echo them out so we can see that everything is working echo "Array index is ".$index." and value is ".$value."\r\n"; echo "Parameter is ".$param." and is set to ".$setting."\r\n\r\n"; } ?> when run from the CLI this script returns the following. [root@fedora4 ~]# php a.php -val1=one -val2=two -val3=three Array index is 0 and value is a.php Parameter is and is set to Array index is 1 and value is val1=one Parameter is val1 and is set to one Array index is 2 and value is val2=two Parameter is val2 and is set to two Array index is 3 and value is val3=three Parameter is val3 and is set to three [root@fedora4 ~]#