2013-09-04 3 views
0

저는 RegEx를 처음 접했고 .htaccess 파일로 작업 할 때 약간의 기본 지식이 있다고 느꼈습니다. 현재 사용자가 유효한 일련 번호를 시스템에 입력했는지 확인하기 위해 양식 유효성 검사를하고 있습니다. 시스템은 다음 직렬 형식을 채택 할 수 있습니다.PHP RegEx - 끝 구분 기호가 없습니까?

  • I-SERIAL123
  • I-SERIAL123
  • SERIAL123
  • SERIAL123

그래서 만약 내가,이 표현을 만족 여부를 확인하기는 preg_match 기능을 사용하고 있습니다 필드가 제출되었습니다.

현재 표현하지만 PHP는 "어떤 결말 구분 기호를 찾을 수 없습니다"예외를 던지는 계속

if (preg_match("^[A-Z0-9\-]{5}$", $_GET['serial']) === false) 

는, 나는 PHP 치트 시트의 커플 검토 한 내 구문에 즉각적인 문제를 볼 수 없습니다.

모든 포인터를 주시면 감사하겠습니다.

+0

을 당신에게없는 게 "/"시작과 패턴의 끝 – Darvex

+0

http://php.net/manual/en/regexp.reference.delimiters.php를 참조하십시오. –

+0

고마워요 펠릭스 – Alex

답변

5

당신은, 당신의 정규식 주위에 보통 /의 구분이 필요합니다 : 그것은 가장 의미가 있지만 ~, # 또는 다른 기호를 사용하여,

if (preg_match("/^[A-Z0-9\-]{5}$/", $_GET['serial']) === false) 
       ^---------------^ 

그러나 영숫자가 아닌 문자 (심지어 쌍 괄호) 유효을 그 정규식하지 메타 문자 또는 수시로 텍스트 검색에 사용되는 : 앤디 레스터에 의해 지적 귀하의 경우에는

if (preg_match("#^[A-Z0-9\-]{5}$#", $_GET['serial']) === false) 

이, 정규식 엔진은 ^이 t 있어야했다 생각 그는 구분자 (수 있지만 다음 정규식에서 사용하기 위해 앵커 "문자열의 시작"을 잃고 대신 \A를 사용해야합니다) :

if (preg_match("^\A[A-Z0-9\-]{5}$^", $_GET['serial']) === false) 
+0

아하하니, 나는 단지 바보 같다고 생각하는 것이 너무 어리 석다. 나는 "/"가 당신이 후행 슬래시를 찾고 싶어한다고 생각했다. 고마워요. – Alex

+3

더 명확히 말하면, PHP는 원래 쿼리에서'^'를 구분 기호로보고 문자열이'^'로 끝나지 않으므로 "끝나는 구분 기호를 찾을 수 없습니다"를 얻습니다. –

+0

예, 구분 기호는 영숫자가 아닌 기호 (예 :'#'또는'@')와 같을 수 있습니다. –

관련 문제