Please enable java script to visit.
NOTEBOOK
HOMEPHP / MySQLJS / HTMLWXappPythonC++Blender其他
PHP判断字符串中是否含有中文字符 - NOTEBOOK
PHP判断字符串中是否含有中文字符
PHP / MySQL
Posted on 2022-12-23
摘要 : PHP判断字符串中是否含有中文,也可以用于只保留中文、只保留字符串中的字母、数字、下划线、小数点、短横线等。
使用了preg_match() preg_replace()
❱ 挑选出中文字符

$string = '你好123欢迎你abcd';
$cn = preg_replace('/[^\p{Han}]/u', '', $string); // 挑选出中文字符
echo $cn;
//结果:你好欢迎你



判断字符串中是否含有中文是对付SPAM的方法之一,可以有效的阻止纯英文的垃圾留言,还可以用这个方法规范用户注册。看下面的代码,兼容gb2312和utf-8。
<?
$str = "测试中文";
echo $str;
echo "<hr>";
// if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) { //只能在GB2312情况下使用
// if (preg_match("/^[\x7f-\xff]+$/", $str)) { //兼容gb2312,utf-8 //判断字符串是否全是中文
if (preg_match("/[\x7f-\xff]/", $str)) { // 判断字符串中是否有中文
echo "正确输入";
} else {
echo "错误输入";
}
?>

另附,双字节字符编码范围
1. GBK (GB2312/GB18030)
\x00-\xff GBK双字节编码范围
\x20-\x7f ASCII
\xa1-\xff 中文 gb2312
\x80-\xff 中文 gbk

2. UTF-8 (Unicode)
\u4e00-\u9fa5 (中文)
\x3130-\x318F (韩文
\xAC00-\xD7A3 (韩文)
\u0800-\u4e00 (日文)


❱ 只保留中文的话字符串

方法1
<?php
// 确保字符串为utf-8
// 转换 GB2312 -> UTF-8
$str = mb_convert_encoding($str, 'UTF-8', 'GB2312');
echo preg_replace('~[^\p{Han}]~u', '', $str),"\n";

方法2
<?php
$str = "a 1b 2b<中文>。xxyy字符";
// 转换 GB2312 -> UTF-8
$str = mb_convert_encoding($str, 'UTF-8', 'GB2312');
preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $str, $matches);
$str = join('', $matches[0]);
// 转换 UTF-8 -> GB2312
$str = mb_convert_encoding($str, 'GB2312', 'UTF-8');
echo $str; // 输出 中文字符
?>

❱ 只保留字符串中的字母、数字、下划线、小数点、短横线

这个是结合了下面3种方法
echo '只保留英文 : '.preg_replace("/[^a-zA-Z0-9_ \-+=.\{\}\(\)\/\\\]+/","", $a);

方法1
<?php
$str='AB12@#$%()_.-cd';
var_dump($str);
var_dump(preg_replace("/[^a-zA-Z0-9_.-]+/","", $str));
?>
输出:

string(15) "AB12@#$%()_.-cd"
string(9) "AB12_.-cd"

方法2
<?php
$text = 'In the 电影_后天 230809-people died.';

$preg = '/[^a-zA-Z0-9.\-_]/';
preg_replace($preg, "", $text);
// Inthe_230809-peopledied.
?>

方法3
$patt = '/[a-zA-Z0-9_\\-\\.]+/';
preg_match_all($patt, $content, $result);
echo implode('', $result);