2010-12-17 4 views
0
$gi = filter_var(filter_var($_POST['group_id'], FILTER_SANITIZE_STRING), 
     FILTER_VALIDATE_REGEXP, array(
      "options"=>array("regexp"=>"/^[a-zA-Z0-9_](?=[^\s]+$).{5,20}$/"))); 

그것은 내가 사용하고있는 코드입니다. 이것은 PHP & MySQL 응용 프로그램입니다. 문제는 5 문자 이하의 값으로 FALSE를 반환한다는 것입니다. '5'를 '6'으로 변경하면 6 자 이하의 문자는 FALSE를 반환합니다. 왜 이런거야?RegExp가 적절한 문자 수로 false를 반환하는 이유는 무엇입니까?

또한, 다음 코드는 동일하게 동작 :

$gi = filter_var($_POST['group_id'], FILTER_VALIDATE_REGEXP, 
     array("options"=>array(
      "regexp"=>"/^[a-zA-Z0-9_](?=[^\s]+$).{5,20}$/"))); 

내 정규 표현식이 1 인 인상을 해요) 문자, 숫자 및 밑줄로 항목을 제한, 2) 공백을 금지하고, 3) 최소 5 자 이상이어야하며 최대 20자를 설정해야합니다.

답변

2

귀하의 정규식으로 이동 :

/^[a-zA-Z0-9_](?=[^\s]+$).{5,20} 

이 있지만 [a-zA-Z0-9_] 내에서 한 문자와 일치 후에 만, 5 자와 일치한다 , 그리고 5 자까지. 그래서 적어도 일치시킬 6 개의 문자열이 필요합니다. 아직 @Allan에, 확실히인지 적 사고 패턴의 수정 감사 :

/^[0-9a-zA-Z_]{5,20}$/ 

편집 : 당신의 마지막 단락을 바탕으로

는 다음과 같은 일이 당신이 찾고있는 무엇을 더 커피 박탈. ;-)

+0

부정 연산자'^'는 부정 연산자입니까? AFAIK'^ \ w'는'\ W'와 같습니다. – Machinarius

+0

최소 길이는 7이 아닌 6입니다. '(? = [^ \ s] + $)'는 미리보기이기 때문에 문자를 소비하지 않습니다. –

+0

고마워, Brad. 내가 해결할 수 없었던 한 가지 더 작은 질문. 특정 단어를 금지하려면 해당 정규 표현식을 어떻게 수정합니까? 예. 쿼티, 또는 모독들? – David

0
/.{5,20}/ 

당신은 엔진이 적어도 5 자 (모든 문자) 및 최대 경우 20 자와 일치하도록 요구하는대로 정규식의이 작품은 책임이있다. 그에 따라 조각을 수정하십시오. 죄송합니다, 질문의 마지막 부분을 읽어 didnt한다 :

는 :) 도움이

EDIT 바랍니다.

1) 잘못되었습니다.^연산자는 앞에있는 문자를 무효화하므로 첫 번째 문자는 숫자가 아니거나 숫자가 아니며 밑줄을 그어도됩니다.2) 오른쪽. 끝 부분 앞에 공백이있을 수 없습니다. 3) 거의 EDIT 위 뭐죠;

) 더 정규식 정보를 들어 http://regular-expressions.info

관련 문제