2013-02-15 4 views
2

사용자가 빈 사용자 이름을 입력하지 못하게하려고합니다.빈 문자열을 실제로 확인하는 방법은 무엇입니까?

if (strlen($nickname) > 0 && strlen(trim($nickname)) == 0) 
{ 
die("Your username is empty"); 
} 

작동하지만 사용자가 Alt + 0160과 공간을 함께 조건이 유지되지 않는 이상 누를 때, 그래서 확인하는 방법을 사용자 이름은 공간과로 구성되어있는 경우 : 내가이 코드를 사용 공간을 확인하려면 alt + 0160 또는 빈 문자가 나오는 다른 문자? ,

$nickname = preg_replace("/[^A-Za-z0-9]/","",$str); //only things from the alfabet + numbers 
if(strlen($nickname) < 1){ 
    // error 
} 

당신은 (단지 당신이 원하는 수 있도록,이 경우에) 당신이 싶지 않는 일을 필터링 :

+2

블랙리스트보다는 화이트리스트를 권합니다. 당신이 처리 할 수없는 수백 개의 유니 코드 공백 문자가있을 것입니다. –

+1

두 번째가있는 경우 if 문의 첫 번째 부분은 필요하지 않습니다. – sachleen

+0

논리가 일치하지 않습니다. $ 별명이> 0이라면 어떻게 == 0이 될 수 있습니까? –

답변

1

는 다음과 같이 그것을 시도 먼저 문자열을 필터링 할 수 있습니다 나중에 문자열의 길이를 확인하십시오.

+0

감사합니다. – marvin

2

당신은 단순히

$string = filter_var($string,FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH); 
+3

이유는 무엇입니까? FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_LOW? –

+1

'FILTER_FLAG_STRIP_LOW' 숫자 값이 32보다 작은 문자를 제거합니다. 'FILTER_FLAG_STRIP_HIGH'는 숫자 값이 127보다 큰 문자를 제거합니다. – Baba

+0

예, 그렇다면 왜 'FILTER_FLAG_STRIP_LOW'와 비트 OR 연산을하고 있습니까? 다른 말로하면, 우리는 당신이 잘못 입력 했음에 틀림 없다고 생각합니다. – crush

관련 문제