2013-11-11 8 views
1

Я хотел бы выяснить, как проверить, является ли второй по длине символ строки числовым.Если второй символ - числовой

Моя строка:

$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

Что о регулярных выражений?

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

Я предлагаю это потому, что вы не будете знать, сколько цифр ваш идентификатор будет иметь, так что вы не можете просто проверить второй до последнего символа.

+0

Спасибо!Остальные ответили на мой вопрос правильно, но вы подумали немного дальше! Отлично. :) –

+0

Было бы немного больше накладных расходов - и выходит за рамки исходного вопроса, но это лучшее решение IMO, за исключением того, что я добавлю '?' После этой последней конечной косой черты в regexp '#/\ d + /? $ # '... на всякий случай, если в URL отсутствует конечная косая черта. – CD001

+0

@ CD001 Вы правы, я редактирую. – Jerska

2

Вы хотите использовать substr. Вы можете использовать это, чтобы получить второй символ.

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

is_numeric(substr($url, -2, 1); 
+0

Отсутствие закрывающих круглых скобок – Goose

0
if (is_numeric(substr($url, -2,1)) { 

должен сделать вам, Вам не нужно регулярное выражение

+0

Действительно? Итак, как вы тестируете 2-значные идентификаторы и т. Д.? – Jerska

+0

Он не хочет этого, он хочет знать, будет ли вторая секунда цифрой. Это будет работать, если число/1000/или/1/ – exussum

+0

И разве это не похоже на то, что цифры являются идентификаторами? Это только начало проблемы. – Jerska

0

использование substr

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

в substr, первый параметр является строкой, второй один это смещение, если смещение отрицательное, оно начнется с и вернуться назад, а последняя - это длина. Если не указано, оно будет идти до конца строки. Так что если вы хотите получить последние буксирные символы, вы могли бы сделать substr($url,-2)

4
$fullurl = explode('/',$_SERVER['SCRIPT_NAME']); 
$last = $fullurl[count($fullurl)-1]; 
//echo $last; 

if(is_int($last)) 
echo "integer"; 
else 
echo "Not integer"; 
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"; 
} 
-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 вы будете в беде. Лучше получить целое число, как указано в другом ответе. Если вы предпочитаете странно выглядящий код с немного лучшей производительностью, вы можете использовать его вместо взрыва():

$value = strrev(strtok(strrev($url), '/')); 
if (is_numeric($value)) {} 
Смежные вопросы