"preg_match(): 컴파일 실패: 문자 클래스의 잘못된 범위" 오류 메시지는 문제를 나타냅니다. 제공된 코드에 사용된 정규식을 사용합니다. 이 문제는 PHP 업그레이드 후, 특히 PCRE2 라이브러리 변경으로 인해 이전 버전에서 PHP 7.3 이상으로 마이그레이션할 때 발생할 수 있습니다.
PHP 7.3 사용 , PHP PCRE 엔진이 PCRE2로 전환되어 이전 버전과 호환되지 않는 몇 가지 변경 사항이 발생했습니다.
PHP 7.3 이전에는 하이픈을 이스케이프하거나 범위를 나타낼 수 없는 위치에 배치하면 문자 클래스 내에서 어떤 위치에서든 사용할 수 있었습니다. 그러나 PHP 7.3 이상에서는 PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL이 기본적으로 false로 설정되어 있습니다.
따라서 문자 클래스에 하이픈을 포함하려면:
제공된 코드에서 문제가 있는 줄은 다음과 같습니다.
if(!preg_match("/^[a-z0-9]([0-9a-z_-\s])+$/i", $subuser)){
문제는 문자 내의 하이픈(-)에 있습니다. 클래스 [0-9a-z_-s]. 문제를 해결하려면 끝이나 시작 부분에 하이픈을 넣으세요.
if(!preg_match("/^[a-z0-9]([0-9a-z\_-\s0-9a-z\_-\s])+$/i", $subuser)){
"PHP 7.3: PCRE2가 PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL을 제거했습니다"는 추가 정보를 제공합니다.
PCRE2는 패턴 검증에서 더 엄격하므로 업그레이드 후 일부 기존 패턴을 더 이상 컴파일할 수 없습니다.
따라서 PHP 7.3 이상 버전에서 PCRE2와의 호환성을 보장하려면 기존 패턴을 면밀히 조사하고 수정해야 할 수도 있습니다.
위 내용은 PHP 7.3으로 업그레이드한 후 내 PHP 정규식에서 'preg_match(): 컴파일 실패: 문자 클래스의 잘못된 범위'가 나타나는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!