2

我想弄清楚,如何检查字符串的倒数第二个字符是否为数字。

我的字符串是:

$url = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];

URL 类似于: http://www.domain.com/2/,http: //www.domain.com/3/等等。

是否可以确定 URL 末尾最后一个反斜杠之前是否存在数字/

就像是:

if (is_numeric($url, second-to-last-character)) {
   // Do real stuff
} else {
   // Do whatever
}
4

7 回答 7

4

正则表达式呢?

if (!preg_match('#/\d+/?$#', $url))
    // There is no numeric at the end, abort !

我建议这样做是因为您不知道您的 id 将有多少位数字,因此您不能只测试倒数第二个字符。

于 2013-11-11T14:30:13.930 回答
4
$fullurl = explode('/',$_SERVER['SCRIPT_NAME']);
$last = $fullurl[count($fullurl)-1];
//echo $last;

if(is_int($last))
echo "integer";
else
echo "Not integer";
于 2013-11-11T14:33:42.523 回答
2

你想用substr. 您可以使用它来获取倒数第二个字符。

http://php.net/manual/en/function.substr.php

is_numeric(substr($url, -2, 1);
于 2013-11-11T14:30:59.690 回答
0
if (is_numeric(substr($url, -2,1) ) {

应该做你,你不需要正则表达式

于 2013-11-11T14:31:21.293 回答
0

利用substr

if(is_numeric(substr($url,-2,1))){
    //dosomething
}else{
   echo "Invalid URL!";
}

其中substr,第一个参数是字符串,第二个参数是偏移量,如果偏移量为负数,则从末尾开始往回走,最后一个参数是长度。如果未指定,它将转到字符串的末尾。所以如果你想得到最后两个字符,你会做substr($url,-2)

于 2013-11-11T14:31:37.370 回答
0
$url='http://www.domain.com/2/,http://www.domain.com/3/';
if(is_numeric (substr($url,-2,1))){
 echo "This is number";
}else{
  echo "This is not number";
}
于 2013-11-11T14:36:30.910 回答
-1

我不想偏离主题,但是当我处理 URL 时,我通常使用删除结尾斜杠

 $url = rtrim($url, '/');

http://www.php.net/manual/en/function.rtrim.php

通常你不需要那个斜线,并且在爆炸 URL 时它会很混乱。您可以使用前面答案中提到的 substr() 函数来获取字符串的最后一个字符。AFAIK substr() 函数比使用正则表达式来完成这样一个简单的任务要快。

 if (is_numeric(substr($url, -1)) {}

编辑

我刚刚意识到,如果您处理的值 > 9,您将遇到麻烦。最好得到另一个答案中提到的整数。如果您更喜欢性能稍好一些的奇怪代码,您可以使用该代码而不是explode():

 $value = strrev(strtok(strrev($url), '/'));
 if (is_numeric($value)) {}
于 2013-11-11T14:45:36.657 回答