strpos的正确返回类型是什么?搜索'@'字符

时间:2013-01-09 05:29:17

标签: php

例如,我有一个字符串I am @ the penthouse.

我需要知道如何在php字符串中找到字符“@”以及字符的位置。

我尝试了strpos,但它不起作用。

感谢您的帮助。

编辑:

我一直用这个来获得角色:

$text = "I am @ the penthouse";

$pos = strrpos($text, '@');

if($pos == true)
{
    echo "yes";
}

5 个答案:

答案 0 :(得分:5)

我会这样做

注意,我正在使用strpos,而不是反对,strrpos

if (($pos = strpos('I am @ the penthouse.', '@') !== false) {
  echo "pos found: {$pos}";
}
else {
  echo "no @ found";
}

注意:由于@可能是字符串中的第一个字符,strpos可能会返回0。请考虑以下事项:

// check twitter name for @
if (strpos('@twitter', '@')) { ... }

// resolves to
if (0) {
  // this will never run!
}

因此,strpos会在找不到匹配项时显式返回false。这是如何正确检查子字符串位置:

// check twitter name for @
if (strpos('@twitter', '@') !== false) {
  // valid twitter name
}

答案 1 :(得分:1)

您也可以使用函数strpos()来实现此目的。与strrpos()类似,它在字符串中搜索子字符串 - 或者至少是字符串 - 但它返回该子字符串的第一个位置或布尔值(false)如果找不到子串。所以片段看起来像:

$position = strpos('I am @ the penthouse', '@');
if($position === FALSE) {
    echo 'The @ was not found';
} else {
    echo 'The @ was found at position ' . $position;
}

注意在php中strpos()strrpos()会出现常见的陷阱。

1。 检查返回值的类型!

想象一下以下示例:

if(!strpos('@stackoverflow', '@')) {
    echo 'the string contains no @';
}

尽管字符串包含'@',但仍未输出'@'。那是因为PHP中的数据类型很弱。之前的strpos()调用将返回int(0),因为它是string中的第一个char。但除非使用'==='运算符强制执行严格类型检查,否则此int(0)将被处理为FALSE。这是正确的方法:

if(strpos('@stackoverflow', '@') === FALSE) {
    echo 'the string contains no @';
}

2。 使用正确的参数顺序!

strpos的签名是:

strpos($haystack, $needle [, $start]);

这与不同于 PHP中的其他str *函数,其中$ needle是第一个arg。

牢记这一点! ;)

答案 2 :(得分:0)

这似乎在PHP 5.4.7中对我有用:

$pos = strpos('I am @ the penthouse', '@');

strpos的确切含义是什么意思?

答案 3 :(得分:-1)

看这对我有用,它也适合你

$string = "hello i am @ your home";
 echo strpos($string,"@");

答案 4 :(得分:-2)

我希望这会有所帮助 -

<?php
$string = "I am @ the penthouse";
$desired_char = "@";

// checking whether @ present or not
if(strstr($string, $desired_char)){

   // the position of the character
   $position = strpos('I am @ the penthouse', $desired_char);
   echo $position;
}
else echo $desired_char." Not found!";
?>