php正则表达式中文
A. 求一个php正则表达式匹配(字母、数字、汉字、下划线)
<?php
$pat='#^([a-zA-Z]+|[0-9]+|[x{4e00}-x{9fa5}]+)$#u';
$s="你好";
var_mp(preg_match($pat,$s));
B. UTF-8正则表达式如何匹配汉字,utf-8正则表达式_PHP教程
判断输入内容是否含有违法字符,请看下面代码
$str = "编程";
if(!preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str))
{
echo "您输入的[".$str."]含有违法字符";
}
else
{
echo "您输入的[".$str."]完全合法,通过!";
}
-----------------------
UTF-8匹配:在javascript中,要判断字符串是中文是很简单的。
比如:
代码如下:
var str = "php编程";
if (/^[\u4e00-\u9fa5]+$/.test(str))
{
alert("该字符串全部是中文");
}
else
{
alert("该字符串不全部是中文");
}
php中,是用\x表示十六进制数据的。
于是,变换成如下的代码:
代码如下:
$str = "php编程";
if (preg_match("/^[\x4e00-\x9fa5]+$/",$str))
{
print("该字符串全部是中文");
}
else
{
print("该字符串不全部是中文");
}
貌似不报错了,判断的结果也正确,不过把$str换成“编程”两字,结果却还是显示“该字符串不全部是中文”,看来这样的判断还是不够准确。
重要:
查阅了《精通正则表达式》发现,对于[\x4e00-\x9fa5]这块东西,自己做一个强化的解释php的正则中, [\x4e00-\x9fa5],其实就是 字符和字符组的概念, \x{hex},表达一个16进制数, 需要注意的是hex 可以是1-2位的,也可以是4位的,但是如果是4位的必须加上大括号,同时,如果是大于x{FF}的hex,必须和u 修饰符连用,不然会非法出错
网上只能找到匹配全角字符的正则: ^[\x80-\xff]*^/ ,这里可以不加大括号 [\u4e00-\u9fa5]可以匹配中文,但是PHP又不支持 不过,既然\x表示的十六进制数据,为什么和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("/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u",$str))
{
echo "您输入的[".$str."]含有违法字符";
}
else
{
echo "您输入的[".$str."]完全合法,通过!";
}
}
GBK:
代码如下:
preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str); //GB2312汉字字母数字下划线正则表达式
以上内容就是PHP中UTF-8正则表达式如何匹配汉字的全部内容,希望大家喜欢。
C. php 正则表达式 只能包含字母和数字
式子:/^[a-zA-Z0-9]+$/u
释义:
(1)“/”:正则表达式的定义,固定的书写形式;
(2)“^”:表示开始;
(3)“[]”:表示一个字符组,匹配包含的任何字符。例如,“[ab]”匹配“plain”中的“a”;
(4)“a-z”:与小写字母a-z匹配的字母范围;
(5)“A-Z”:表示与大写字母A-Z匹配的字母范围;
(6)“0-9”:匹配范围为0-9的数字;
(7)“+”:表示匹配数为一个或多个;
(8)“$”:匹配输入行的结尾。如果设置了RegExp对象的Multiline属性,则$也匹配“ ”或“ ”之前的位置;
(9)“u”:最后一个u是模式修饰符,严格来说,它可以是预定义的常数。表示使用unicode进行匹配。
(3)php正则表达式中文扩展阅读:
其它正则表达式符号的含义:
(1)“*”:与上一个子表达式匹配任意次。例如,zo*匹配“z”以及“zo”和“zoo”。*等效于{0,};
(2)“?”:匹配上一个子表达式零或一次。例如,“做(es)?”匹配“do”或“does”。?等效于{0,1};
(3)“{n}”:n是一个非负整数。匹配被确定n次。例如,“o{2}”不能与“Bob”中的“o”匹配,但是可以与“food”中的两个o匹配;
(4)“{n,}”:n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但是可以匹配“foooood”中的所有o。“o{1,}”等效于“o+”。“o{0,}”等效于“o*”;
(5)“ {n,m}”:m和n是非负整数,其中n <= m。 至少匹配n次,最多匹配m次。 例如,“ o {1,3}”将匹配“ fooooood”中的前三个o作为一个组,最后三个o作为一个组。 “ o {0,1}”等效于“ o?”。 请注意,逗号和两个数字之间不能有空格。
D. 关于PHP里中文正则表达式的问题
刚才的不够严谨,修改下:
/^[a-zA-Z_\x{4e00}-\x{9fa5}][\x{4e00}-\x{9fa5}\w]{2,11}$/u
解释:
[a-zA-Z_\x{4e00}-\x{9fa5}] //第一位,必须非数字,但又要满足其它条件
[\x{4e00}-\x{9fa5}\w]{2,11} //从第二位开始,必须满足全部条件,长度为2到11位(加第一位就是3到12位啦)。
补充:
\x{4e00}-\x{9fa5}这个就是汉字的Unicode范围。
一定不要忘记最后那个 u ,没有这个修正符,就不能正常识别中文了
E. php正则表达式把西文双引号替换成中文双引号
我来解释下2楼的代码, preg_replace的第一个参数的正则,第二个参数是替换结果,第三个参数是要替换的字符串。
第一个参数'/"([^"]*)"/'的意思是匹配成对出现的双引号内容,()代表引用,[^"]*代表引号内的内容,也就是一个不包含"的任意长度的字符串。
第二个参数'“${1}”'中的${1}使用了第一个参数中的第一个引用,也就是双引号内的内容,所以第二个参数的意思就是将第一个参数的正则匹配到的英文双引号内的内容放到了中文双引号中。
解释完毕。
F. php正则表达式匹配一段中文,中间有换行,空白,应该怎么写
有多种处理方法:
1、使用[sS]匹配任意字符,而不是使用“.”
2、使用s单行修饰模式,例:$pattern='#abc.*?def#s';//能匹配abc换行def
3、使用s*匹配换行和空格,php里s能匹配空白字符,含换行
php里的中文使用[x7f-xff]表示,因此,使用正则:
$pattern='#[x7f-xff]+(?:s*[x7f-xff]+)*#';即可
G. 求PHP 的正则表达式 大全
匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^\x00-\xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 匹配空白行的正则表达式:\n\s*\r 评注:可以用来删除空白行 匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? /> 评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为 匹配首尾空白字符的正则表达式:^\s*|\s*$ 评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 评注:表单验证时很实用 匹配网址URL的正则表达式:[a-zA-z]+://[^\s]* 评注:网上流传的版本功能很有限,上面这个基本可以满足需求 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 评注:表单验证时很实用 匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7} 评注:匹配形式如 0511-4405222 或 021-87888822 匹配腾讯QQ号:[1-9][0-9]{4,} 评注:腾讯QQ号从10000开始 匹配中国邮政编码:[1-9]\d{5}(?!\d) 评注:中国邮政编码为6位数字 匹配身份证:\d{15}|\d{18} 评注:中国的身份证为15位或18位 匹配ip地址:\d+\.\d+\.\d+\.\d+ 评注:提取ip地址时有用 匹配特定数字: ^[1-9]\d*$ //匹配正整数 ^-[1-9]\d*$ //匹配负整数 ^-?[1-9]\d*$ //匹配整数 ^[1-9]\d*|0$ //匹配非负整数(正整数 + 0) ^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0) ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数 ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0) ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点数 + 0) 评注:处理大量数据时有用,具体应用时注意修正 匹配特定字符串: ^[A-Za-z]+$ //匹配由26个英文字母组成的字符串 ^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串 ^[a-z]+$ //匹配由26个英文字母的小写组成的字符串 ^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串 ^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串 /http:\/\/(.*)\//i //匹配外部链接地址
满意请采纳