> 백엔드 개발 > PHP 튜토리얼 > PHP 7.3으로 업그레이드한 후 '문자 클래스의 잘못된 범위' 오류로 인해 PHP preg_match()가 실패하는 이유는 무엇입니까?

PHP 7.3으로 업그레이드한 후 '문자 클래스의 잘못된 범위' 오류로 인해 PHP preg_match()가 실패하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-15 10:00:21
원래의
493명이 탐색했습니다.

Why is my PHP preg_match() failing after upgrading to PHP 7.3 with a

preg_match(): 잘못된 문자 클래스 범위로 인해 컴파일 실패

오류 메시지 "preg_match(): 컴파일 실패: 잘못된 범위 오프셋 20의 문자 클래스"는 정규식 패턴에 잘못된 문자 클래스 범위가 포함되어 있음을 나타냅니다. 이 경우, 서버에서 PHP를 업그레이드한 후 갑자기 문제가 나타났는데, 그 이유를 살펴보겠습니다.

오류 원인:

PHP 7.3 PCRE(Perl Compatible Regular Expressions) 엔진을 PCRE2로 업그레이드하여 더욱 엄격한 패턴 검증을 포함하여 몇 가지 변경 사항을 가져왔습니다. 특히 하이픈(-) 문자는 이제 문자 클래스에서 다르게 처리됩니다.

코드 조각:

제공된 코드는 정규식을 사용하여 사용자 이름을 확인합니다.

/^[a-z0-9]([0-9a-z_-\s])+$/i
로그인 후 복사

이전 버전의 PHP에서는 하이픈을 이스케이프하거나 하이픈이 있는 위치에 배치하면 문자 클래스 내 어디에서나 사용할 수 있었습니다. 범위의 표시기로 해석될 수 없습니다.

PHP 7.3의 영향:

PCRE2를 사용하면 하이픈 문자 클래스에서 이스케이프()가 더 이상 무시되지 않습니다. . 이는 PHP 7.3 이상에서 위의 코드를 다음과 같이 업데이트해야 함을 의미합니다.

/^[a-z0-9]([0-9a-z_-]\s)$/i
로그인 후 복사

해결책:

컴파일 오류를 해결하려면 하이픈 문자가 있는지 확인하세요. 수업은 다음 규칙을 따릅니다.

  • 시작 또는 끝 위치에 하이픈을 사용하세요.
  • 하이픈이 다른 위치에 나타날 경우 백슬래시()로 이스케이프 처리하세요.

추가 정보:

  • 유니코드 속성 이스케이프에 대한 공식 PHP 문서에서는 이전 버전의 PCRE가 하이픈을 모든 위치에서 리터럴 문자로 처리했다고 설명합니다. 문자 클래스입니다.
  • PCRE2에서는 이제 유효하지 않은 문자 클래스 범위에 대해 특정 오류가 발생하므로 문제가 더 명확해집니다.
  • PHP 7.3 이전 버전의 경우 해결 방법은 하이픈을 이스케이프 처리하는 것입니다. , 그러나 PHP 7.3 이상에서는 더 이상 필요하지 않습니다.

위 내용은 PHP 7.3으로 업그레이드한 후 '문자 클래스의 잘못된 범위' 오류로 인해 PHP preg_match()가 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿