2012-10-29 4 views
2

사용자 이름의 길이는 4 ~ 32 자입니다.정규 표현식의 문자 수를 설명합니다.

function validate_username($input) 
{ 
    return (bool) preg_match('/^([a-z]+[a-z0-9_]*){4,32}$/i', $input); 
} 

내 시도가 잘못 되었나요? FALSE

그러나 var_dump(validate_username('h_q8Yewre_')); 반환 TRUE

+0

왜하지? $ l = strlen ($ input); if (4 <= $ l && $ l <= 32) ... –

+0

대문자도 일치 시키시겠습니까? –

+0

@ full.stack.ex 네 말이 맞지만 정규식 스타일의 길이 검사기를 선호했다. –

답변

5

{4,32} 내 안 소화가 4 번 일치합니다. 그것을 만족시키기 위해서는 최소한 4 글자가 필요합니다.

는 문자 클래스 지정자에서 독립적 인 내다 주장 필요한 길이 주장하려면이

preg_match('/^(?=.{4,32})([a-z]+[a-z0-9_]*)$/i' 

        |    | 
      asserts length  | 
          checks char mix 
+1

+1하지만 이것은 실제로 여기서 요구되는 것에 다소 복잡합니다. 첫 번째 문자의 유효성을 확인한 다음 나머지'{3,31} '문자를 검증하는 것이 어떨까요? – DaveRandom

+0

여기에 대문자가 허용됩니까? A-Z로 지정해야한다고 생각 했나요? – MrFox

+0

@MrFox'/ i' 플래그로 대소 문자를 구별하지 않습니다. – DaveRandom

3

당신은 당신의 반복 4 ~ 32 번 반복됩니다 반환

var_dump(validate_username('h_q8Y'));. 사용자 이름이 문자로 시작하는지 확인하고 싶다고 가정합니다. \w[a-zA-Z0-9_]에 해당

preg_match('/^[a-z]\w{3,31}$/i', $input); 

하는 것으로이 경우, 이것은 당신이 찾고있는 아마.

2

정규 표현식이 잘못되었습니다.입니다. 여기

  • ([a-z]+[a-z0-9_]*)h_q8Y과 일치합니다.
  • 그럼 {4,32}h_q8Y의 32 이하인 적어도 4 또는 있을 의미한다. 하지만 h_q8Y 하나만 제공했습니다.

따라서 작동하지 않습니다.

다음 표현식을 사용하는 것이 좋습니다.

/^[a-z]\w{3,31}$/i