원본 링크: http://blog.csdn.net/wide288/article/details/30066639
$str = "Programming";
// 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 "You 입력한 [" .$str."] 잘못된 문자 ";
}
else
{
echo "입력하신 ["입니다. ]완전히 합법적이며 통과되었습니다!";
}
------------------------- -- ---
UTF-8 매칭:
자바스크립트에서는 문자열이 중국어인지 판별하는 것이 매우 간단합니다. 예: var str = "php 프로그래밍"; if (/^[u4e00-u9fa5]+$/.test(str)) { Alert("이 문자열은 모두 중국어입니다.") } else{ 경고("이 문자열 모두 중국어로 된 것은 아닙니다."); }
PHP에서 x는 16진수 데이터를 나타내는 데 사용됩니다. 따라서 다음 코드로 변환됩니다. $str = "php 프로그래밍"; if (preg_match("/^[x4e00-x9fa5]+$/",$str)) { print("이 문자열은 모두 중국어입니다." ); } else { print("모든 문자열이 중국어로 되어 있지 않습니다.") } 더 이상 오류가 보고되지 않는 것으로 보이며, 판단 결과는 "programming"이라는 단어로 대체됩니다. , 결과는 여전히 "모든 문자열이 중국어로 되어 있지 않습니다"라고 표시됩니다. 이 판단은 아직 충분히 정확하지 않은 것 같습니다.
중요: "정규식 능숙"을 확인한 결과 [x4e00-x9fa5]에 대해 제가 직접 설명을 강화한 것을 발견했습니다.
php의 정규식에서 [x4e00-x9fa5]는 실제로 문자이고 문자그룹 x{hex}의 개념은 16진수를 표현하는데, 16진수는 1~2자리 또는 4자리가 될 수 있으나 4자리인 경우에는
에 중괄호를 추가해야 합니다. 동시에 16진수가 x{FF}보다 크면 u 수정자와 함께 사용해야 합니다. 그렇지 않으면 불법 오류가 발생합니다.
전자 문자 일치에 대한 일반 규칙만 온라인에서 찾을 수 있습니다: ^[x80- xff]*^/ , 여기서 중괄호 [u4e00-u9fa5]를 추가하지 않고도 중국어를 일치시킬 수 있지만 PHP는 이를 지원하지 않습니다. 그런데 x로 표시되는 16진수 데이터인데 왜 js에서 제공하는 x4e00-x9fa5 범위와 다른가요? ? 그래서 아래 코드로 변경했는데 정말 정확하다는 것을 알았습니다. $str = "php 프로그래밍"; if (preg_match("/^[x{4e00}-x{9fa5}]+$/u",$str ) ) { print("이 문자열은 모두 중국어입니다."); } else { print("이 문자열은 모두 중국어가 아닙니다.") }
PHP에서 UTF-8 인코딩에서 중국어 문자를 일치시키는 정규식을 사용하는 방법을 알고 있습니다. 최종 정답 - /^[x{4e00}-x{9fa5}]+$/u, 위 글을 참조하여 다음과 같은 테스트 코드를 작성했습니다(다음 코드를 복사하여 .php 파일로 저장)
php $action = Trim($_GET['action']); if($action == "sub") { $str = $_POST['dir'] //if(!preg_match(" /^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str)) //GB2312 중국어 영숫자 밑줄 정규식 if(!preg_match( "/^ [x{4e00}-x{9fa5}A-Za-z0-9_]+$/u",$str)) //UTF-8 중국어 영숫자 밑줄 정규식 { The [".$str." ] 입력한 문자에 잘못된 문자가 포함되어 있습니다"; else ;/font>" } } ?>