ルート システムを構築していURI segment
ますが、正確に一致する変数が必要です。[A-Za-z]
変数は (先頭または末尾だけでなく) 任意の位置に配置できることに注意することが非常に重要です。
たとえば、これは
/post/(:letter)/comment/(:letter)
また
/user/(:letter)
また
/(:letter)
頼れないよう^
に$
問題は、期待どおりに動作しないこと===
です。これは数字と文字の両方に一致するため、望ましくありません。私は文字とのみを気にします。
A-Za-z
URI 変数には文字とのみを含める必要があるため、これを数字やその他のものではなく、のみに一致させたいと考えています。
実際の問題を実証するには、
$pattern = '~/post/(:letter)/commentid/(:letter)/replyid/(:letter)~';
$pattern = str_replace('(:letter)', '[A-Za-z]+', $pattern);
$uri = '/post/foo/commentid/someid/replyid/someanotherid';
preg_match($pattern, $uri, $matches);
print_r($matches); // Success
これを見てください:
$uri = '/post/foo123/commentid/someid123/replyid/someanotherid123';
preg_match($pattern, $uri, $matches);
print_r($matches); // Also success, I don't want this!
ご覧のとおり、変数 、 にも数値が含まれているため、これは望ましくあり
ませfoo123
ん。someid123
someanotherid123
質問は、
$magic_regex = 'What should it be to match exactly [A-Za-z] at any position?';
$pattern = str_replace('(:letter)', $magic_regex, $pattern);