2013-11-21 3 views
0

제대로 작동하는 것처럼 보이지만 선행 문자를 넣으면 확인하지 않으며 끝 문자를 입력하면 확인하지 않습니다.preg_match가 올바르게 작업을 수집하지 않습니다.

나는 확실히 문자열이 형식으로되어 있는지 확인하려면 :

6 Numbers | Hyphen | 1 Number | A-Z any case | Hyphen | 5 Numbers 

그래서이 123456-1a-12345123456-1A-12345처럼 작동합니다.

$string = 'this12345-1A-12345'; // This works, and it shouldn't 
$string = '12345-1A-12345this'; // This also works and it shouldn't 

$pattern = "([0-9]{6}[-]{1}[0-9]{1}[A-Za-z]{1}[-]{1}[0-9]{5})"; 
echo preg_match($pattern, $string); 

내가 뭘 잘못하고 있니? 죄송합니다. 저는 preg_match을 처음 접해 보았습니다. 문법에 대한 좋은 라이브러리를 찾을 수 없습니다.

+0

* 또한 [Open source RegexBuddy alternatives] (http://stackoverflow.com/questions/89718/is-there) 및 [온라인 정규식 테스트] (http://stackoverflow.com/questions/32282/regex-testing)를 참조하십시오. 유용한 도구 또는 더 자세한 내용은 [RegExp.info] (http://regular-expressions.info/)를 참조하십시오. – mario

답변

3

에만 패턴의 시작과 끝을 표시 (패턴 구분 기호를 추가)에 앵커를 추가해야합니다

$pattern = "~^([0-9]{6}[-]{1}[0-9]{1}[A-Za-z]{1}[-]{1}[0-9]{5})$~"; 

을 제쳐두고, 당신의 패턴으로 단축 할 수있는 것처럼 :

$pattern = '~^[0-9]{6}-[0-9][A-Z]-[0-9]{5}$~i'; 
preg_match($pattern, $string, $match); 
print_r($match); 
+0

http://php.net/manual/en/regexp.reference.delimiters.php – deceze

+0

'~'와'~ i'는 무엇을합니까? 설명해 주시겠습니까? –

+0

@deceze : 예, 알고 있습니다. 괄호는 구분 기호로 사용할 수 있지만 정규식 패턴에서 매우 모호하기 때문에 최악의 선택입니다. –

3

^을 사용하면 줄의 시작 부분에 대해 정규식 검사를하고 끝에 대해서는 $을 사용할 수 있습니다.

$pattern = "(^[0-9]{6}[-]{1}[0-9]{1}[A-Za-z]{1}[-]{1}[0-9]{5}$)"; 

이 패턴은 문자열 앞뒤에 아무 것도없는 경우에만 적용됩니다.

+1

'()'*는 * 구분 기호입니다. – deceze

+0

http://php.net/manual/en/regexp.reference.delimiters.php – deceze

+0

나는 그룹을 정의하는 데만 사용될 것이라고 생각했습니다. 감사합니다. – kero

관련 문제