UTF - 8 정규 표현 식 은 한자 와 어떻게 일치 합 니까?

3211 단어
입력 내용 에 위법 문자 가 있 는 지 판단 하려 면 아래 코드 를 보십시오.

$str = "  ";
// if(!preg_match("/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u",$str)) 
//UTF-8              
if(!preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) //UTF-8              
 { 
  echo "    [".$str."]      "; 
 }
 else 
 {
  echo "    [".$str."]    ,  !"; 

 }

-----------------------
UTF - 8 일치: 자바 script 에서 문자열 이 중국어 라 고 판단 하 는 것 은 간단 합 니 다.
예 를 들 면:
 
  
 var str = "php ";
 if (/^[\u4e00-\u9fa5]+$/.test(str))

{ alert(" ");


else{ alert(" ");
 }

php 에 서 는 16 진수 데 이 터 를 \ x 로 표시 합 니 다.
그래서 다음 코드 로 변환 합 니 다.
 
  
 $str = "php ";
if (preg_match("/^[\x4e00-\x9fa5]+$/",$str))
{
print(" ");
}
else { print(" ");
}

잘못 보고 한 것 같 지 않 고 판단 한 결과 도 정확 한 것 같 지만 $str 를 '프로 그래 밍' 두 글자 로 바 꾼 결과 '이 문자열 이 모두 중국어 가 아 닙 니 다' 라 는 판단 이 정확 하지 않 은 것 같 습 니 다.중요:
찾 아 보 니 [x4e 00 - \ x9fa 5] 라 는 물건 에 대해 스스로 강 화 된 해석 phop 의 정규 중 [x4e 00 - \ x9fa 5] 을 만 들 었 는데 사실은  문자 와 문자 그룹의 개념, \ x {hex} 은 16 진수 를 표현 합 니 다. 주의해 야 할 것 은 hex 는 1 - 2 자리 일 수도 있 고 4 자리 일 수도 있 습 니 다. 그러나 4 자리 일 경우 괄호 를 붙 여야 합 니 다. 또한 x {FF} 보다 큰 hex 일 경우 u 수정자 와 연결 해 야 합 니 다. 그렇지 않 으 면 불법 오류 가 발생 할 수 있 습 니 다.
인터넷 에서 전각 문자 와 일치 하 는 정규 만 찾 을 수 있 습 니 다.   ^[\x80-\xff]*^/   ,여기에 괄호 [\ u4e 00 - \ u9fa 5] 를 추가 하지 않 으 면 중국어 와 일치 할 수 있 지만 PHP 는 지원 되 지 않 습 니 다.     그런데 \ x 가 표시 하 는 16 진수 데 이 터 는 왜 js 에서 제공 하 는 범위 \ x4e 00 - \ x9fa 5 와 다 릅 니까?
그래서 나 는 아래 코드 로 바 뀌 었 는데 정말 정확 하 다 는 것 을 알 게 되 었 다.
 
  
 $str = "php ";
 if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str))
{
print(" ");
}
else { print(" ");
 }

php 에서 utf - 8 인 코딩 에서 정규 표현 식 으로 한자 와 일치 하 는 최종 정확 한 표현 식 인 / ^ [\ x {4e 00} - \ x {9fa 5}] + $/ u 를 알 게 되 었 습 니 다. 상기 글 을 참고 하여 다음 과 같은 테스트 코드 를 썼 습 니 다. (아래 코드 를 복사 하여. php 파일 로 저장)

    [".$str."]      ";  

 }  

else  

{  

 echo "    [".$str."]    ,  !";  

 } } 

?
입력 문자 (숫자, 자모, 한자, 밑줄):
GBK:
 
  
preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str); //GB2312

이상 의 내용 은 PHP 에서 UTF - 8 정규 표현 식 이 한자 의 모든 내용 과 어떻게 일치 하 는 지 에 대한 것 입 니 다. 마음 에 드 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기