다음 PHP 코드를 최적화하여 preg_replace + substr이 아닌 preg_replace 만 사용할 수있는 방법이 있습니까? 사람들이 의견에 언급 한 바와 같이PHP : optimize regexp + substr
$type = substr(preg_replace('/([^a-z])/', '$2', strtolower($_GET["type"])) , 0, 3);
다음 PHP 코드를 최적화하여 preg_replace + substr이 아닌 preg_replace 만 사용할 수있는 방법이 있습니까? 사람들이 의견에 언급 한 바와 같이PHP : optimize regexp + substr
$type = substr(preg_replace('/([^a-z])/', '$2', strtolower($_GET["type"])) , 0, 3);
내가 간단하게하고 유효하지 않은 문자열을 입력 한 경우 바로 사용자에게 경고 것, 정직하게하려면 괜찮 았어, 그냥 조금 정리해 줄 수있어.
$type = substr(preg_replace('/[^a-z]+/', '', strtolower($_GET['type'])), 0, 3);
, 코드 샘플 좀 기능 장애,하지만 난 당신이 정확하게 뭘 원하는지 이해한다면 (처음 세 개의 소문자 알파벳 문자를 검색), 다음이 그것을 수행해야합니다
$type = preg_replace('/.*?([a-z])(?:.*?([a-z]))?(?:.*?([a-z]))?.*/', '$1$2$3', strtolower($_GET['type']));
$type = $_GET['type'];
if (!preg_match('/^[a-z]{0,3}$/', $type)) {
// Handle error properly here.
die('Type argument must be a string of 0-3 lower case letters (a-z)');
}
당신이 정말로 입력을 수정하려는 경우, 원래 solutio :
원하는 것은 무엇입니까? 그곳에는 정규식에'$ 2'가 없습니다 ... – Blixt
일부 정규식에서는 누락 된 참조가 공백으로 처리되므로 $ 2는 실제로 일치 항목을 제거 할 수 있습니다. –
예, 그렇지만'' ''도 마찬가지입니다. – Blixt