首页  >  文章  >  后端开发  >  php怎么检测字符串中是否包含中文

php怎么检测字符串中是否包含中文

青灯夜游
青灯夜游原创
2022-09-22 19:10:556321浏览

检测步骤:1、使用preg_replace()配合正则表达式过滤字符串,去掉字符串中的非中文字母,语法“preg_replace("/[^x{4E00}-x{9FFF}] /u",'', 原字符串)”,会返回一个包含全部中文字母的过滤字符串;2、利用“===”判断过滤字符串是否为空字符串,语法“过滤字符串===''”,若等于则原字符串中不包含中文,反之则原字符串中包含中文。

php怎么检测字符串中是否包含中文

本教程操作环境:windows7系统、PHP8.1版、DELL G3电脑

在php中,可以使用preg_replace()函数和“===”运算符来检测字符串中是否包含中文。

实现步骤:

步骤1:使用preg_replace()函数配合正则表达式过滤字符串,去掉字符串中的非中文字母

preg_replace() 函数可以执行正则表达式的搜索和替换;只需要利用正则表达式搜索字符串中的非中文字母,并将其替换成空字符''即可。

正则表达式为:/[^x{4E00}-x{9FFF}] /u

$pattern = "/[^\x{4E00}-\x{9FFF}]+/u";
$newStr=preg_replace($pattern,'', $str);

php怎么检测字符串中是否包含中文

会返回一个包含全部中文字母的过滤字符串

步骤2:利用“===”运算符判断过滤字符串是否为空字符串

$newStr===''
  • 如果等于,则原字符串中不包含中文

  • 如果不等于,则原字符串中包含中文

实现代码:

function f($str){
	echo "原字符串:";
	var_dump($str);
	$pattern = "/[^\x{4E00}-\x{9FFF}]+/u";
	$newStr=preg_replace($pattern,'', $str);
	if($newStr===''){
		echo "字符串中不包含中文
"; }else{ echo "字符串中包含中文
"; } }

调用上面的f($str)函数

$str1= 'php中文网!-=1548';
f($str1);
$str2 = "123456";
f($str2);

php怎么检测字符串中是否包含中文

说明:

preg_replace()函数

preg_replace() 函数可以执行正则表达式的搜索和替换,是一个强大的字符串替换处理函数,该函数的语法格式如下:

preg_replace($pattern, $replacement, $subject [, $limit = -1 [, &$count]])

参数说明如下:

  • $pattern:要搜索的模式,可以使一个字符串或字符串数组;
  • $replacement:用于替换的字符串或字符串数组。如果这个参数是一个字符串,并且 $pattern 是一个数组,那么所有的模式都使用这个字符串进行替换。如果 $pattern 和 $replacement 都是数组,每个 $pattern 使用 $replacement 中对应的元素进行替换。如果 $replacement 中的元素比 $pattern 中的少,多出来的 $pattern 使用空字符串进行替换。
  • $subject:要进行搜索和替换的字符串或字符串数组,如果 $subject 是一个数组,搜索和替换回在 $subject 的每一个元素上进行, 并且返回值也会是一个数组。
  • $limit:可选参数,每个模式在每个 $subject 上进行替换的最大次数。默认是 -1(无限)。
  • $count:可选参数,如果指定,将会被填充为完成的替换次数。

如果 $subject 是一个数组,preg_replace() 函数会返回一个数组,其他情况下返回一个字符串。

如果函数 preg_replace() 搜索到匹配项,则会返回被替换后的 $subject,否则返回没有改变的 $subject。preg_replace() 函数的每个参数(除了参数 $limit)都可以是一个数组。如果参数 $pattern 和参数 $replacement 都是数组,那么该函数将以其键名在数组中出现的顺序来进行处理。如果发生错误,则返回 NULL。

参数 $replacement 中可以包含后向引用 \n 或 $n,语法上首选后者。每个这样的引用将被匹配到的第 n 个捕获子组捕获到的文本替换。n 可以是 0-99,\0 和 $0 代表完整的模式匹配文本。

捕获子组的序号计数方式为:代表捕获子组的左括号从左到右,从 1 开始数。如果要在 $replacement 中使用反斜线,必须使用 4 个("\\" 因为这首先是 php 的字符串,经过转义后是两个,再经过正则表达式引擎后才被认为是一个原文反斜线)。

当在替换模式下工作并且后向引用后面紧跟着需要是另外一个数字(比如:在一个匹配模式后紧接着增加一个原文数字),不能使用 \1 这样的语法来描述后向引用。比如,\11 将会使 preg_replace() 不能理解你希望的是一个 \1 后向引用紧跟一个原文 1,还是一个 \11 后向引用后面不跟任何东西。这种情况下解决方案是使用 ${1}1。这创建了一个独立的 $1 后向引用,一个独立的原文 1。

当使用被弃用的 e 修饰符时,这个函数会转义一些字符(即:'、"、\ 和 NULL)然后进行后向引用替换。当这些完成后请确保后向引用解析完后没有单引号或双引号引起的语法错误(比如:'strlen(\'$1\')+strlen("$2")')。确保符合 PHP 的字符串语法,并且符合 eval 语法。因为在完成替换后,引擎会将结果字符串作为 php 代码使用 eval 方式进行评估并将返回值作为最终参与替换的字符串。

恒等式(===)运算符

恒等式(===)运算符是进行给定变量或值之间的严格比较;它比较,并查看两个变量(表达式或常量)是否值相等且具有相同的数据类型,即两者都是字符串或两者都是整数等等。

如果两个变量(表达式或常量)包含相同的值和相同的数据类型,则此运算符返回true,否则返回false。

示例:

<?php 
header("content-type:text/html;charset=utf-8");  
// 给变量赋整数值
$x = 999; 
echo &#39;$x=&#39;.$x."<br>"; 
// 给变量赋字符串值
$y = &#39;999&#39;; 
echo &#39;$y=&#39;.$y."<br>"; 
//比较$x 和$y 
if ($x === $y) 
    echo &#39;$x和$y相等&#39;; 
else
    echo &#39;$x和$y不相等&#39;; 
?>

输出:

php怎么检测字符串中是否包含中文

说明:在上面的例子中,$ x和$ y的值相等但数据类型不同,因而返回false,执行else部分。

推荐学习:《PHP视频教程

以上是php怎么检测字符串中是否包含中文的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn