常用正则式及其函数,在PHP中有两套正则表达式函数库。一套是由PCRE(Perl Compatible Regular Expression)库提供的,
其使用以“preg_”为前缀命名的函数。另一套是由POSIX(Portable Operation System interface)扩展库提供的,
一般使用以“ereg_”为前缀命名的函数。
常用正则式及其函数
0、正数:/^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d+)$/
1、非负整数:^\d+$
2、正整数:^[0-9]*[1-9][0-9]*$
3、非正整数:^((-\d+)|(0+))$
4、负整数:^-[0-9]*[1-9][0-9]*$
5、整数:^-?\d+$
6、非负浮点数:^\d+(\.\d+)?$
7、正浮点数:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
8、非正浮点数:^((-\d+\.\d+)?)|(0+(\.0+)?))$
9、负浮点数:^(-((正浮点数正则式)))$
10、英文字符串:^[A-Za-z]+$
11、英文大写串:^[A-Z]+$
12、英文小写串:^[a-z]+$
13、英文字符数字串:^[A-Za-z0-9]+$
14、英数字加下划线串:^\w+$
15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
16、URL链接:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$或^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\’:+!]*([^<>\”\”])*$
17、邮政编码:^[1-9]\d{5}$
18、中文:^[\u0391-\uFFE5]+$
19、电话号码:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$
20、手机号码:^((\(\d{2,3}\))|(\d{3}\-))?1\d{10}$
21、双字节字符(包括汉字在内):^\x00-\xff
22、首尾空格:(^\s*)|(\s*$)
23、HTML标记:<(.*)>.*<\/\1>|<(.*) \/>
24、空行:\n[\s| ]*\r
25、链接href:(h|H)(r|R)(e|E)(f|F) *= *(‘|”)?(\w|\\|\/|\.)+(‘|”| *|>)?
26、邮件:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
27、链接src:(s|S)(r|R)(c|C) *= *(‘|”)?(\w|\\|\/|\.)+(‘|”| *|>)?
28、IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)
29、手机(CN):(86)*0*13\d{9}
30、固定电话(CN):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}
31、电话号码(CN):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}
32、邮编(CN):[1-9]{1}(\d+){5}
33、浮点数:(-?\d*)\.?\d+
35、电话区号:/^0\d{2,3}$/
36、腾讯QQ:^[1-9]*[1-9][0-9]*$
37、帐号(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
38、帐号(中文、英文、数字及下划线):^[\u4e00-\u9fa5_a-zA-Z0-9]+$
39、日期:^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$
JAVACRIPT中用法如下:
<script type="text/javascript"> var exp = /(86)*0*13\d{9}/; if (exp.test(contact) == false) { alert("Please Enter A Valid Phone"); return false; } var exp = /^((?:19|20)\d\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/; if(starttime.match(exp) == false) { alert("Please Enter Valid Time"); return false; } </script>
PHP中用法如下:
在PHP中有两套正则表达式函数库。一套是由PCRE(Perl Compatible Regular Expression)库提供的,
其使用以“preg_”为前缀命名的函数。另一套是由POSIX(Portable Operation System interface)扩展库提供的,
一般使用以“ereg_”为前缀命名的函数。
1.preg_match (string $pattern, string $content [, array $matches])
<?php //需要匹配的字符串。date函数返回当前时间 $content = "Current date and time is ".date("Y-m-d h:i a").", we are learning PHP together."; //使用通常的方法匹配时间 if (preg_match ("/\d{4}-\d{2}-\d{2} \d{2}:\d{2} [ap]m/", $content, $m)) { echo "匹配的时间是:" .$m[0]. "\n"; } //由于时间的模式明显,也可以简单的匹配 if (preg_match ("/([\d-]{10}) ([\d:]{5} [ap]m)/", $content, $m)) { echo "当前日期是:" .$m[1]. "\n"; echo "当前时间是:" .$m[2]. "\n"; } ?>
2.ereg()和eregi()
//文件内容的多行匹配
<?php //parse_ini_file()。该函数直接将*.ini文件解析到一个大数组中。 $rows = file('php.ini'); //循环遍历 foreach($rows as $line) { if(trim($line)) { //将匹配成功的参数写入数组中 if(eregi("^([a-z0-9_.]*) *=(.*)", $line, $matches)) { $options[$matches[1]] = trim($matches[2]); } unset($matches); } } //输出参数结果 print_r($options); ?>
3.preg_grep (string $pattern, array $input)
<?php $subjects = array( "Mechanical Engineering", "Medicine", "Social Science", "Agriculture", "Commercial Science", "Politics" ); //匹配所有仅由有一个单词组成的科目名 $alonewords = preg_grep("/^[a-z]*$/i", $subjects); ?>
4.preg_match_all()
5.ereg_replace()和eregi_replace()
<?php //源代码的清理 //将文件读入数组中 $lines = file('source.php'); for($i=0; $i<count($lines); $i++) { //将行末以“\\”或“#”开头的注释去掉 $lines[$i] = eregi_replace("(\/\/|#).*$", "", $lines[$i]); //将行末的空白消除 $lines[$i] = eregi_replace("[ \n\r\t\v\f]*$", "\r\n", $lines[$i]); } //整理后输出到页面 echo htmlspecialchars(join("",$lines)); ?>
6.preg_replace()
<?php //字符串 $string = "Name: {Name}<br>\nEmail: {Email}<br>\nAddress: {Address}<br>\n"; //模式 $patterns =array( "/{Address}/", "/{Name}/", "/{Email}/" ); //替换字串 $replacements = array ( "No.5, Wilson St., New York, U.S.A", "Thomas Ching", "tom@emailaddress.com", ); //输出模式替换结果 print preg_replace($patterns, $replacements, $string); ?>
7.split()和spliti(), preg_split()
<?php $date = "08/30/2006"; //分隔符可以是斜线,点,或横线 list($month, $day, $year) = split ('[/.-]', $date); //输出为另一种时间格式 echo "Month: $month; Day: $day; Year: $year<br />\n"; ?>
<?php $seek = array(); $text = "I have a dream that one day I can make it. So just do it, nothing is impossible!"; //将字符串按空白,标点符号拆分(每个标点后也可能跟有空格) $words = preg_split("/[.,;!\s']\s*/", $text); foreach($words as $val) { $seek[strtolower($val)] ++; } echo "共有大约" .count($words). "个单词。"; echo "其中共有" .$seek['i']. "个单词“I”。"; ?>
Pingback: JS/JQUERY字符串截取分割匹配等处理汇总 | 蓝文资源库 – 海量优质开发设计资源分享平台