2012-07-02 3 views
0

내 등록을 위해 내 정규식과 사용자 이름을 확인하십시오 - 사용자 이름은 3 자 이상 20 자 미만이어야합니다. 또한 사용자 이름은 영숫자 문자와 "_", ".", "-"만 포함 할 수 있습니다.사용자 이름을 regexp로 확인하십시오

/^([\w\.\-]{3,20})$/isu. 

지금 내가이 존재하는 거짓 이름 캔트 컨텐츠 (P-)을 반환하는 경우,도 (P-)을 확인 할

private $regExpUsername = "/^([\w\.\-]{3,20})$/isu"; 

    private function checkUsername($username){ 
     if(!preg_match($this->regExpUsername, $username)){ 
      $this->addError(ERR_ENTER_USERNAME); 
     } 
    } 
+1

's' 수정이 이해되지 않는다 참조하십시오. 그리고 "만약 이것이 존재한다면 false username cant content (p-)"설명이 명확하지 않다. – zerkms

답변

3

나는 당신이 종료 할 수있는 사용자 이름을 싶지 않아 이해 a -. 대시 마지막 문자를 정의하는 문자 클래스의 일부가 아니므로 \w이 대시이 사용자 이름은 밑줄로 종료 할 수 있도록 할 밑줄을 포함,하지만 때문에이이

^[\w.-]{2,19}[\w.]$ 

될 것이다. zerkms은 당신이 사용하지 않는 . 특수 문자의 동작을 변경하기 때문에 s 수정이 여기 말도 안돼 주석으로

here on Regexr

참조하십시오.

또한 i 수정자는 의미가 없으므로 대문자와 대소 문자가 일치하지만 표현식을 정의하는 문자는 사용하지 않습니다.

업데이트 그럼 당신은 어느 곳에서나 문자열에 p- 존재하는 한,이 주장은 곧 실패하는 negative lookahead

^(?!.*p-)[\w.-]{3,20}$ 

(?!.*p-)가 부정적 예측입니다 필요합니다.

here on Regexr

+0

아니요, 사용자 이름 톤에 "p-", 예를 들어 davp-id가 들어 있기를 원합니다. –

+0

@AramGevorgyan이 내 솔루션을 업데이트했습니다. – stema

관련 문제