Maison développement back-end tutoriel php PHP匹配中文正则(转载)!

PHP匹配中文正则(转载)!

Jun 23, 2016 pm 01:37 PM

php 正则匹配中文 (2011-09-26 10:10:46)

标签: 杂谈 分类: 专业篇

转载:http://hi.baidu.com/?_d/blog/item/063b77d5432f8f1aa18bb7fd.html

在javascript中,要判断字符串是中文是很简单的。比如:

var str = "php编程";

if (/^[\u4e00-\u9fa5]+$/.test(str)) {

alert("该字符串全部是中文");

} else {

alert("该字符串不全部是中文");

}


想当然的,在php中来判断字符串是否为中文,就会沿袭这个思路:

$str = "php编程";

if (preg_match("/^[\u4e00-\u9fa5]+$/",$str)) {

print("该字符串全部是中文");

} else {

print("该字符串不全部是中文");

}

?>


不过,很快就会发现,php并不支持这样的表达,报错:

Warning: preg_match() [function.preg-match]: Compilation failed: PCRE does not support \L, \l, \N, \U, or \u at offset 3 in test.php on line 3


刚开始从google上查了很多次,想从php正则表达式对于十六进制数据的

表达方式上进行突破,发现在php中,是用\x表示十六进制数据的。于是,

变换成如下的代码:

$str = "php编程";

if (preg_match("/^[\x4e00-\x9fa5]+$/",$str)) {

print("该字符串全部是中文");

} else {

print("该字符串不全部是中文");

}

貌似不报错了,判断的结果也正确,不过把$str换成“编程”两字,结果却

还是显示“该字符串不全部是中文”,看来这样的判断还是不够准确。


后来跑回百度搜“php 匹配汉字 utf 8”,发现文章的匹配程度竟然要比google的高多了,

看来百度的“百度更懂中文”还在一定程度上是正确的。在第二篇文章《★★★ 求UTF8

下匹配汉字的正则, 在线等.........》中看到了如下的一些内容:


楼主zhiin(┈ Jcan ┈)2006-11-15 15:59:30 在 Web 开发 / PHP 提问


求UTF8下匹配汉字的正则, 不包括全角字符及特殊符号!

  

网上只能找到匹配全角字符的正则: ^[\x80-\xff]*^/

[\u4e00-\u9fa5]可以匹配中文,但是PHP又不支持

  

郁闷中.......


1 楼PleaseDoTellMeWhy(Allah bless you!)回复于 2006-11-15 16:04:55 得分 11


chr(0xa1) . '-' . chr(0xff)可以匹配所有中文,但是不知道在UTF-8下如何!Top

2 楼zhiin(┈ Jcan ┈)回复于 2006-11-15 16:11:34 得分 0


即使在gb2312下, chr(0xa1) . '-' . chr(0xff) 也不对

它把全角符号也匹配进来了Top

3 楼xuzuning(唠叨)回复于 2006-11-15 16:19:56 得分 90


模式修正符: u  


按照这几位提供的线索逐个试了一下,发现还真的如他们所说,可能还跟编码有关系,

因此需要了解一下模式修正符的相关知识??于是继续搜索百度。


在一篇《模式修正符》的文章中了解到:


u (PCRE_UTF8)


此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。

本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。

例子:

preg_match('/[\x{2460}-\x{2468}]/u', $str); 匹配 内码汉字

按照他提供的方式进行测试,代码如下:


$str = "php编程";

if (preg_match("/^[\x{2460}-\x{2468}]+$/u",$str)) {

print("该字符串全部是中文");

} else {

print("该字符串不全部是中文");

}


发现这次依然对是否为中文判断失常。不过,既然\x表示的十六进制数据,

为什么和js里边提供的范围\x4e00-\x9fa5不一样呢?于是我就换成了下边的代码:

$str = "php编程";

if (preg_match("/^[\x4e00-\x9fa5]+$/u",$str)) {

print("该字符串全部是中文");

} else {

print("该字符串不全部是中文");

}

本来以为铁定成功了的事情,没想到,warning又一次产生了:

Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 6 in test.php on line 3

看来又有错误的表达方式了,于是对照了一下那篇文章的表达方式,

给“4e00”和“9fa5”两边分别用"{"和“}”包起来,跑了一遍,发现真的准确了:

$str = "php编程";

if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) {

print("该字符串全部是中文");

} else {

print("该字符串不全部是中文");

}


知道了php中utf-8编码下用正则表达式匹配汉字的最终正确表达式??/^[\x{4e00}-\x{9fa5}]+$/u,

于是我又用这个表达式去百度搜索,发现竟然还真有别人得出过这样正确的结论,只不过通过

常规的方式很难找到而已,而且仅仅搜到有一篇??《用正则删除汉字》,看来互联网上对于

信息的正确性的筛选还是亟待加强的。


ps:对google不死心,也搜索了一下,又发现了一篇文章《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汉字字母数字下划线正则表达式

{  

      echo"您输入的[".$str."]含有违法字符";  

}

else

{

       echo "您输入的[".$str."]完全合法,通过!";  

}

}

?>

输入字符(数字,字母,汉字,下划线):

(转)


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Travailler avec les données de session Flash dans Laravel Travailler avec les données de session Flash dans Laravel Mar 12, 2025 pm 05:08 PM

Laravel simplifie la gestion des données de session temporaires à l'aide de ses méthodes de flash intuitives. Ceci est parfait pour afficher de brefs messages, alertes ou notifications dans votre application. Les données ne persistent que pour la demande ultérieure par défaut: $ demande-

Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Mar 14, 2025 am 11:42 AM

L'extension PHP Client URL (CURL) est un outil puissant pour les développeurs, permettant une interaction transparente avec des serveurs distants et des API REST. En tirant parti de Libcurl, une bibliothèque de transfert de fichiers multi-protocol très respectée, PHP Curl facilite Efficient Execu

Misque de réponse HTTP simplifié dans les tests Laravel Misque de réponse HTTP simplifié dans les tests Laravel Mar 12, 2025 pm 05:09 PM

Laravel fournit une syntaxe de simulation de réponse HTTP concise, simplifiant les tests d'interaction HTTP. Cette approche réduit considérablement la redondance du code tout en rendant votre simulation de test plus intuitive. L'implémentation de base fournit une variété de raccourcis de type de réponse: Utiliser illuminate \ support \ faades \ http; Http :: faux ([[ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

12 meilleurs scripts de chat PHP sur Codecanyon 12 meilleurs scripts de chat PHP sur Codecanyon Mar 13, 2025 pm 12:08 PM

Voulez-vous fournir des solutions instantanées en temps réel aux problèmes les plus pressants de vos clients? Le chat en direct vous permet d'avoir des conversations en temps réel avec les clients et de résoudre leurs problèmes instantanément. Il vous permet de fournir un service plus rapide à votre personnalité

Expliquez le concept de liaison statique tardive en PHP. Expliquez le concept de liaison statique tardive en PHP. Mar 21, 2025 pm 01:33 PM

L'article traite de la liaison statique tardive (LSB) dans PHP, introduite dans PHP 5.3, permettant une résolution d'exécution de la méthode statique nécessite un héritage plus flexible. Problème main: LSB vs polymorphisme traditionnel; Applications pratiques de LSB et perfo potentiel

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Caractéristiques de sécurité du cadre: protection contre les vulnérabilités. Caractéristiques de sécurité du cadre: protection contre les vulnérabilités. Mar 28, 2025 pm 05:11 PM

L'article traite des fonctionnalités de sécurité essentielles dans les cadres pour se protéger contre les vulnérabilités, notamment la validation des entrées, l'authentification et les mises à jour régulières.

See all articles