正则:
preg_match();//执行匹配正则表达式,匹配到一个后,后面的重复字符串不会匹配
不能作为定界符的(a-z,A-Z,0-9,空格,\),尽量使用'//'.
$pet = '/0/';//定界符里的叫原子,a-z,A-Z,0-9,空格,_
$pet = '/\d/';//只匹配数字0-9
$pet = '/\D/';//匹配不是0-9
$pet = '/\w/';//匹配a-z,A-Z,0-9,_
$pet = '/\W/';//跟\w相反,匹配字符&
$pet = '/\s/';//匹配空格,回车,换行,tab键,(匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。)
$pet = '/\S/';//跟\s相反(匹配任何可见字符。等价于[^ \f\n\r\t\v]。)
$pet = '/[a-z]/';//取范围,匹配a-z之间的字符
$pet = '/[^a-z]/';//匹配非a-z的字符
$pet = '/./';//匹配除回车符(\n)以外的字符
$pet = '/a*/';//匹配*前的字符(0次或多次),没有字符时返回空字符串
$pet = '/a+/';//匹配1次或多次的字符
$pet = '/a?/';//匹配第0次或第一次的字符
$pet = '/a{0,2}/';//匹配0次或2次的字符,a{0} = a+{0,2}从0开始到2结束
$pet = '/^a/';//匹配以a开始的
$pet = '/^a.+f$/';//以a开始以f结束的所有字符
$pet = '/ABC/i';//不区分大小写
$pet = '/^abc/m';//m,视为多行查找匹配以abc开头的字符
$pet = '/^bcd.+abc$/s';//s,视为单行(将换行后的字符串视为一行)
例:'bcdef_\n abc'; '/^bcd.+abc$/s';
$pet = '/a+/U';//取消a后面重复
$pet = '/\w+/x';//取消空白字符
$pet = '/\f/';//匹配一个换页符
$pet = '/\r/';//匹配一个回车符
$pet = '/\t/';//匹配一个跳格(移至下一列)
例:URL验证
$str = 'http://www.baidu.com';
$pettern = '/(http|https)?(:\/\/)?(\w+.?)(\w+.?)(\w+.?)/';
preg_match_all();//匹配定界的全部作为单个字符,依次匹配,直到匹配完。
例:$str = 'aaabc';
$pet = '/a/';
preg_match_all($pet, $str, $match);
//0=>a,1=>a,2=>a
preg_replace($pet, $replace, $str);//正则替换
例:$str = '<div>你好</div>';
$pet = '/<div>(.*)</div>/';
$replace = '<h1>大家好</h1>';
$match = preg_replace($pet, $replace, $str);
//输出为<h1>大家好</h1>
'/1[0-2]/';//匹配字符串中第一个从1开始的两位数字,例:$str = '4202811'; //返回11
'/0\d/';//匹配字符串中第一个从0开始的两位数字,例:$str = '420281'; //返回02
'/\d{3}/';//匹配字符串中开始的3位数字, 例:$str = '420281';//返回420
'/[0|1|2]\d/';//匹配字符串中(0,1,2)三个字符在最前面的两位数,例:$str = '4202811';//最先匹配到的是20
'/[1-9]{2}/';//匹配字符串中1-9两位数字, 例:$str = '420281';//返回42,,,只能匹配在范围(1-9)之间的数字
$right = '[1]{13},[2]{14},[2]{15}';
$moreright=preg_replace('/-1/i','',$right);
$moreright=preg_replace('/\[\d+\]/i','',$moreright);
$moreright=preg_replace('/\{/i','',$moreright);
$moreright=preg_replace('/\}/i','',$moreright);
echo $moreright;
返回:13,14,15
身份证正则表达式:
15: /^\d{14}(\d|x)$/
18: /^\d{17}(\d|x)$/
/^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/
$str = '42028119910916115x';
// $pet = '/^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/';
$pet = '/^\d{17}(\d|x)$/';
preg_match($pet, $str, $matches);
var_dump($matches);
$pet = '/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/';//15位数身份证正则表达式
$pet = '/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}(\d|x|X)$/';//18位数身份证正则表达式
6-18位密码正则表达式(数字,字母大小写)
$str = '42ZX2X';
$pet = '/^[0-9a-zA-Z]{6,18}$/';
preg_match($pet, $str, $matches);
var_dump($matches);
6位不重复的数字表达式:
$str = '123456';
$search = '/^(?!\d*?(\d)\d*?\1)\d{6}$/';
// $search = '/^(?=\d+)(?!([\d])\1{5})[\d]{6}$/';
preg_match($search,$str, $matches);
var_dump($matches);
$err = 0; //连续次数
for ($i = 0; $i < 6; $i++) {
if (5 > $i) {
if (1 == abs($pay_pwd[$i] - $pay_pwd[$i + 1])) {
$err++;
}
} else {
if (1 == abs($pay_pwd[$i] - $pay_pwd[$i - 1])) {
$err++;
}
}
}
6位不连续数字。
preg_replace($pattern
, $replacement
, $subject
[, int $limit
= -1 [, int &$count
]]);// 执行一个正则表达式的搜索和替换
$pettern:要搜索的模式。可以是一个字符串或字符串数组。
$replacement:用于替换的字符串或字符串数组
$subject:要进行搜索和替换的字符串或字符串数组。
$limit:每个模式在每个subject
上进行替换的最大次数。默认是 -1(无限)
$count:如果指定,将会被填充为完成的替换次数。
如果subject
是一个数组, preg_replace()返回一个数组, 其他情况下返回一个字符串。
<?php
$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}1,$3';
echo preg_replace($pattern, $replacement, $string);//将$string的值用正则表达式替换成$replacement.
?> $replacement = (${1}=April) + (1,) + ($3=2003);
返回结果为:April 1, 2003
preg_replace('/\(.*?\)/', '', $num);
正则表达式'/\(.*?\)/';//匹配从“(”开始到“)”结束之间的全部字符
.*会匹配后面的一切字符,就是到结束的意思
加?后就是不贪婪模式,这时要看?后边的字符是什么了,如.*?"的意思是遇到双引号则匹配结束
.*?>的意思是遇到>则匹配结束
车牌号正则表达式
preg_match("/[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新使]{1}[A-Z]{1}[0-9a-zA-Z]{4,6}$/u",$car['number'])
手机号正则表达式:
$str = '18271655896';
$pet = '/(1[3456789]{1}[0-9])[0-9]{4}([0-9]{4})/';
$phone = preg_match($pet, $str, $matches);
var_dump($matches);
//array(3) {
[0]=> string(11) "18271655896" [1]=> string(3) "182" [2]=> string(4) "5896"}
$phone = preg_replace('/(1[3456789]{1}[0-9])[0-9]{4}([0-9]{4})/i', '$1****$2', $str);//(1[3456789]{1}[0-9]),表示匹配前3位,
[0-9]默认匹配1位
[0-9]{4},表示匹配之后4位,([0-9]{4}),匹配最后4位
echo $phone;
//182****5896
$1,$2:表示$str通过正则匹配后,得出的结果中索引为1和2的值
小数点后最多只能2位:
$str = '520.02';
$pet = '/^\d+(\.\d{0,2})?$/';
$res = preg_match($pet, $str, $matches);
var_dump($matches);
preg_split($pet, $str);//通过一个正则表达式分隔字符串
//使用逗号或空格(包含" ", \r, \t, \n, \f)分隔短语
$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
print_r($keywords);
匹配英文半角加数字的字符
$str = '1,2,3';
$pet = '/^[,0-9]*$/';
preg_match($pet, $str, $res);
var_dump($res);//1,2,3
数字匹配:
$str = '110';
$pea = '/^\+?[1-9][0-9]*$/';//匹配开始不为0的正整数,不包括小数
$pes = '/^[1-9]+$/';//匹配1-9之间数字的正整数,不限位数
$pet = '/^[0-9]+(\.\d{1,2})?$/';//匹配正整数,小数点后两位或一位
$ped = '/^[0-9]+([.]{1}[0-9]{1,2})?$/';//匹配正整数,小数点后两位或一位
$pet = '/\+?1[0-9]$/';//匹配十位为1的两位正整数
preg_match($pea,$str,$res);
var_dump($res);
长度为10位,小数点两位数正则
$loan_left_money = '0';
if (!empty($loan_left_money) && !preg_match('/^(\d{1,8}\.\d{1,2})$/', $loan_left_money)) {
echo 'no';
} else {
echo 'yes';
}
匹配整数位两位数,小数位四位数
$res = '22.5453';
$pat = '/^(\d{1,2}(\.\d{1,4}))|(\d{1,2}(\.\d{0}))$/';