Я искал часы, пытаясь найти решение этого. Я пытаюсь определить, является ли REQUEST URI законным и сломать его оттуда.
$samplerequesturi = "/variable/12345678910";
Чтобы определить, является ли это законным, первая variable
раздела является только буквой и является переменной по длине. Второй раздел – это цифры, которые должны иметь 11 баллов. Моя проблема заключается в том, чтобы избежать косой черты, чтобы она соответствовала uri. Я пробовал:
preg_match("/^[\/]{1}[az][\/]{1}[0-9]{11}+$/", $samplerequesturi) preg_match("/^[\\/]{1}[az][\\/]{1}[0-9]{11}+$/", $samplerequesturi) preg_match("/^#/#{1}[az]#/#{1}[0-9]{11}+$/", $samplerequesturi) preg_match("/^|/|{1}[az]|/|{1}[0-9]{11}+$/", $samplerequesturi)
Среди других, которые я не могу вспомнить сейчас.
Обычно запрос отклоняется:
preg_match(): Unknown modifier '|' preg_match(): Unknown modifier '#' preg_match(): Unknown modifier '['
Edit: Я думаю, я должен сказать, что URI REQUEST уже известен. Я пытаюсь доказать всю строку, чтобы убедиться, что это не фиктивная строка, то есть убедиться, что 1-й набор – это только строчные буквы, а 2-й набор – всего 11 чисел.
/
это не единственное, что вы можете использовать в качестве разделителя. Фактически, вы можете использовать почти любой не-slphanumeric символ. Лично мне нравится использовать ()
потому что это напоминает мне, что первым элементом массива результатов является полное совпадение, и ему также не требуется экранирование в шаблоне.
preg_match("(^/([az]+)/(\d+)$)i",$samplerequesturi,$out); var_dump($out);
Это должно сделать это.
Ваша проблема может заключаться в том, что вы используете /
forward-slash как разделитель регулярных выражений (в начале и в конце выражения регулярного выражения). Переключитесь на использование символа, отличного от прямого косой черты, например символа #
хеша или любого другого символа, который никогда не будет отображаться в этом конкретном выражении. Тогда вам не нужно будет вообще избегать символа прямой косой черты в выражении.
Если вы хотите использовать регулярное выражение (которое я не считаю необходимым в этом случае, просто разделение на «/» должно быть в порядке:
$samplerequesturi = "/variable/12345678910"; preg_match("@^/([A-Za-z]+)/(\d+)$@", $samplerequesturi, $out); echo $out[1]; echo $out[2];
должен вас поймать