2009-07-17 3 views
1

다음 PHP 코드를 최적화하여 preg_replace + substr이 아닌 preg_replace 만 사용할 수있는 방법이 있습니까? 사람들이 의견에 언급 한 바와 같이PHP : optimize regexp + substr

$type = substr(preg_replace('/([^a-z])/', '$2', strtolower($_GET["type"])) , 0, 3); 
+4

원하는 것은 무엇입니까? 그곳에는 정규식에'$ 2'가 없습니다 ... – Blixt

+0

일부 정규식에서는 누락 된 참조가 공백으로 처리되므로 $ 2는 실제로 일치 항목을 제거 할 수 있습니다. –

+0

예, 그렇지만'' ''도 마찬가지입니다. – Blixt

답변

0

내가 간단하게하고 유효하지 않은 문자열을 입력 한 경우 바로 사용자에게 경고 것, 정직하게하려면 괜찮 았어, 그냥 조금 정리해 줄 수있어.

$type = substr(preg_replace('/[^a-z]+/', '', strtolower($_GET['type'])), 0, 3); 
1

, 코드 샘플 좀 기능 장애,하지만 난 당신이 정확하게 뭘 원하는지 이해한다면 (처음 세 개의 소문자 알파벳 문자를 검색), 다음이 그것을 수행해야합니다

$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 :