>백엔드 개발 >PHP 튜토리얼 >PHP 업그레이드 후 `preg_match()`가 실패하는 이유는 무엇입니까?

PHP 업그레이드 후 `preg_match()`가 실패하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-18 19:40:15885검색

Why Does My `preg_match()` Fail After a PHP Upgrade?

PHP 업그레이드로 인해 preg_match() 문자 클래스 범위의 컴파일 실패

"preg_match(): 컴파일 실패: 잘못된 범위 "오프셋의 문자 클래스" 오류는 PHP의 preg_match 함수를 사용하여 영숫자 사용자 이름을 확인할 때 자주 발생합니다. 이 오류는 서버에서 PHP를 업그레이드한 후에 나타나는 것으로 보고되었습니다.

이 문제는 PHP 7.3 및 최신 버전에 도입된 최근 변경 사항으로 인해 발생합니다. PHP는 PCRE 엔진을 PCRE2로 마이그레이션하여 더욱 엄격한 패턴 검증을 제공합니다. 특히 문자 클래스에서 하이픈(-)을 사용하는 것과 관련이 있습니다.

PHP 7.3 이전 버전에서는 하이픈을 이스케이프하거나 문자 클래스의 시작이나 끝에 배치하여 문자 클래스에서 사용할 수 있었습니다. 범위. 그러나 PHP 7.3 이상에서는 PCRE2 엔진이 이 요구 사항을 강화했습니다.

문자 클래스 [a-z0-9]([0-9a-z_-s])의 하이픈 때문에 오류가 발생합니다. $가 범위의 시작이나 끝에 있지 않습니다. 이로 인해 컴파일이 실패하게 됩니다.

이 문제를 해결하려면 다음과 같이 문자 클래스를 수정해야 합니다.

/[a-z0-9]([0-9a-z-_ ]+)+/i

범위 끝에 하이픈을 배치하면 범위를 나타내는 것이 아니라 클래스 내에서 리터럴 문자로 해석됩니다.

PHP 업데이트로 인해 다른 패턴 구문 변경 사항이 도입되었을 수도 있다는 점에 유의하는 것이 중요합니다. 7.3. 이러한 변경 사항과 코드에 미치는 영향에 대한 자세한 내용은 PCRE2 마이그레이션에 대한 공식 PHP 문서를 참조하세요.

위 내용은 PHP 업그레이드 후 `preg_match()`가 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.