php正则表达式 - PHP基础教程 - PHP最新专题合集
php正则表达式:用PHP正则表达式判断
<?php
$message=$_POST['message'];
if(preg_match('/<script[^>]*>/',$message)){ //匹配
echo 'error';die;
}
?>
php正则表达式:php 正则表达式 url匹配
1,preg_grep(pattern,2113array);它的返回值5261是一4102个新1653数组,新数组的元素是成功匹配的元素。
php正则表达式:php 怎样判断一个字符串为正则表达式
PHP 中的正则表达式格式为2113 : /.*/
如果这个字5261符串由 / 开头, 由 / 结尾,应该就是一个正则表4102达式1653。
header('content-type:text/html;charset=utf-8');$preg = "/^\/.*\/$/";
$test = "/abc/";
if (preg_match($preg, $test)) {
echo '是正则表达式';
} else {
echo '不是正则表达式';
}
php正则表达式:求一PHP判断变量是否符合正则表达式
function test ($a) {
return preg_match('/^[a-z]{2}\d*$/i', $a);
}
php正则表达式:php正则表达式验证用户名
//中文和英文结合
扩展
if(!preg_match("/^[a-zA-Z\x{4e00}-\x{9fa5}]{6,20}$/u",$name)){
echo "错误!";
exit;
}else if(!preg_match("/^[\w\_]{6,20}$/u")){
echo "错误!";
}
这样好像不行啊,用户名怎么改成纯英文也可以纯中文也可以
补充
}else if(!preg_match("/^[\w\_]{6,20}$/u")){ 需要第二个参数;
从新写代码:
<?php//中文和英文结合而且6-20字符
$name='aa中aassd';
$preg='/^[a-zA-Z\x{4e00}-\x{9fa5}]{6,20}$/u';
$preg2='/^[a-zA-Z]+$/u';
$preg3='/^[\x{4e00}-\x{9fa5}]+$/u';
if(preg_match($preg2,$name) || preg_match($preg3,$name)){
echo "错误";//纯中文或纯英文
}elseif(preg_match($preg,$name)){
echo "OK";//中文结合,因为前面排除纯中文或者纯因为
}else{
echo "错误";
}
//英文、数字、下划线6-20位字符
$preg='/^[\w\_]{6,20}$/u';
?>
php正则表达式:PHP正则表达式验证
$r=preg_match('/^[a-zA-Z0-9]+$/', 'z9aMyDRidMGrpuKciJbjXZdOdoV482V8');
if($r) echo 'success';
else echo 'fail';
正则说明:
^^
^表示后面2113的内容必须5261在开头。4102
$表示前面的内容必须在结尾。
[]表示匹1653配其中的任意一种字符。
a-z表示从小写a到小写z。
+表示之前的内容可以是一个或多个。
其他:
如果允许为空,可以把+改成*,*表示之前的内容可以没有也可以是一个或多个。
如果要限定长度,可以把+改成{min,max},{min,max}表示之前的内容最小多少位,最大多少位,如{20,40}。
php正则表达式:php 正则表达式如何判断一个字符串是否为合法的四则数学算式
(?!.*[^\d+\-*/\(\)]) #规则21130,字符串必须5261由数字,4102符号和括号组成
(?!.*\)\d) #规则A,不1653允许右括号后接数字
(?!.*[+\-*/]([+\-*/]|\))) #规则B,不允许符号后面接符号或右括号
(?!.*\([+*/]) #规则C,不允许左括号后接运算符(- 可以表示负号)
(?!.*(\d|\))\() #规则D,不允许左括号前有数字或右括号
(?=\d|\-|\() #规则E,字符串开头必须是,数字,负号,左括号中的一个
(?=.*(\d|\))$) #规则F:结尾必须是数字或者右括号
[^\(\)]*
#开始匹配,捕获括号,使用平衡组来判断括号数量是否相等,需要.NET的支持
(
(
(?'open'\()
[^\(\)]*
)+
(
(?'-open'\))
[^\(\)]*
)+
)*
(?(open)(?!)) #规则G:左右括号数量必须相等
$
最终的正则表达式为:
^(?!.*[^\d+\-*/\(\)])(?!.*\)\d)(?!.*[+\-*/]([+\-*/]|\)))(?!.*\([+*/])(?!.*(\d|\))\()(?=\d|\-|\()(?=.*(\d|\))$)[^\(\)]*(((?'open'\()[^\(\)]*)+((?'-open'\))[^\(\)]*)+)*(?(open)(?!))$
没考虑空格的情况,因为考虑空格需要加很多很多个\s*,大大降低可读性
由于使用了平衡组,此正则表达式需要在.NET环境下运行
php正则表达式:php正则验证。
echo $result . "\n";
php正则表达式:php判断是否包含两个词的正则表达式
||正则2113: 更多扩展补充
扩展
<?php
5261$str = "我想判断是否包含两个词,比如4102 '外送' 和 '茶' 这两个词";
1653if(preg_match("/外送/", $str) || preg_match("/茶/", $str)){
echo "通过";
}
else
{
echo "不通过";
}
?>
其实你的逻辑有错误,
还有能不能一条正则实现呢?可能我会有3个词,4个词,5个.....
补充
看上去比较繁杂,不推荐用正则,效率低。
扩展
词很多的话,效率确实低,请问还有其他更好的办法吗?
补充
$key = array("非法","词汇","过滤");
$str = "检查这句是否包含非法词汇";
for($i = 0; $i -1)
{
echo "非法";
exit(0);
}
}
思路是这样,没调试。