php正则日期
❶ php应用:获取日期正则表达式:\\d{4}[年|\-|\.]\d{\1-\12}[月|\-|\.]\d{\1-\31}日

^d{4}(年|-|.)(0?[1-9]|1[0-2])(月|-|.)(0?[1-9]|[1-2]d|3[0-1])日?$
这种是还是有缺陷的你可以看到最后一个,还有就是2月31日这样的也会被匹配的。不过应对一般日期还是可以的。
❷ PHP正则年月日匹配
既然你要这种给你吧
^d{4}-d{1,2}-d{1,2}$匹配8个数字标准日期,建议你用2015-08-28这种格式
^[0-9]{4}-(((0[13578]|(10|12))-(0[1-9]|[1-2][0-9]|3[0-1]))|(02-(0[1-9]|[1-2][0-9]))|((0[469]|11)-(0[1-9]|[1-2][0-9]|30)))$
❸ PHP如何用正则表达式把标准时间年月日转为横杠形式
首先,应该是双反斜杠,不是单反斜杠
这里提供两种方式
str_replace(array('年','月'),'-',$date_str);
date('Y-m-d H:i',strtotime($date_str));
❹ 史上最全的PHP正则表达式
一、校验数字的表达式  
  
 1 数字:
  
 ^[0-9]*$
  
 2 n位的数字:
  
 ^\d{n}$
  
 3 至少n位的数字:
  
 ^\d{n,}$
  
 4 m-n位的数字:
  
 ^\d{m,n}$
  
 5 零和非零开头的数字:
  
 ^(0|[1-9][0-9]*)$
  
 6 非零开头的最多带两位小数的数字:
  
 ^([1-9][0-9]*)+(.[0-9]{1,2})?$
  
 7 带1-2位小数的正数或负数:
  
 ^(\-)?\d+(\.\d{1,2})?$
  
 8 正数、负数、和小数:
  
 ^(\-|\+)?\d+(\.\d+)?$
  
 9 有两位小数的正实数:
  
 ^[0-9]+(.[0-9]{2})?$
  
 10 有1~3位小数的正实数:
  
 ^[0-9]+(.[0-9]{1,3})?$
  
 11 非零的正整数:
  
 ^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
  
 12 非零的负整数:
  
 ^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
  
 13 非负整数:
  
 ^\d+$ 或 ^[1-9]\d*|0$
  
 14 非正整数:
  
 ^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
  
 15 非负浮点数:
  
 ^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
  
 16 非正浮点数:
  
 ^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
  
 17 正浮点数:
  
 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
  
 18 负浮点数:
  
 ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
  
 19 浮点数:
  
 ^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
  
  二、校验字符的表达式 
  
 1 汉字:
  
 ^[\u4e00-\u9fa5]{0,}$
  
 2 英文和数字:
  
 ^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
  
 3 长度为3-20的所有字符:
  
 ^.{3,20}$
  
 4 由26个英文字母组成的字符串:
  
 ^[A-Za-z]+$
  
 5 由26个大写英文字母组成的字符串:
  
 ^[A-Z]+$
  
 6 由26个小写英文字母组成的字符串:
  
 ^[a-z]+$
  
 7 由数字和26个英文字母组成的字符串:
  
 ^[A-Za-z0-9]+$
  
 8 由数字、26个英文字母或者下划线组成的字符串:
  
 ^\w+$ 或 ^\w{3,20}$
  
 9 中文、英文、数字包括下划线:
  
 ^[\u4E00-\u9FA5A-Za-z0-9_]+$
  
 10 中文、英文、数字但不包括下划线等符号:
  
 ^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
  
 11 可以输入含有^%&',;=?$\"等字符:
  
 [^%&',;=?$\x22]+
  
 12 禁止输入含有~的字符:
  
 [^~\x22]+
  
  三、特殊需求表达式 
  
 1、 Email地址:
  
 ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
  
 2 、域名:
  
 [a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
  
 3 、InternetURL:
  
 [a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
  
 4 、手机号码:
  
 ^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
  
 5 、电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):
  
 ^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$ 
  
 6 国内电话号码(0511-4405222、021-87888822):
  
 \d{3}-\d{8}|\d{4}-\d{7}
  
 7 、身份证号:
  
 15或18位身份证:
  
 ^\d{15}|\d{18}$
  
 15位身份证:
  
 ^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$
  
 18位身份证:
  
 ^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$
  
 8、 短身份证号码(数字、字母x结尾):
  
 ^([0-9]){7,18}(x|X)?$
  
 或
  
 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
  
 9 、帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):
  
 ^[a-zA-Z][a-zA-Z0-9_]{4,15}$
  
 10 、密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):
  
 ^[a-zA-Z]\w{5,17}$
  
 11 、强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):
  
 ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$ 
  
 12、 日期格式:
  
 ^\d{4}-\d{1,2}-\d{1,2}
  
 13、 一年的12个月(01~09和1~12):
  
 ^(0?[1-9]|1[0-2])$
  
 14 、一个月的31天(01~09和1~31):
  
 ^((0?[1-9])|((1|2)[0-9])|30|31)$ 
  
 15 、钱的输入格式:
  
 16 、1.有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":
  
 ^[1-9][0-9]*$ 
  
 17、 2.这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:
  
 ^(0|[1-9][0-9]*)$ 
  
 18 、3.一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:
  
 ^(0|-?[1-9][0-9]*)$ 
  
 19 、4.这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:
  
 ^[0-9]+(.[0-9]+)?$ 
  
 20 、5.必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:
  
 ^[0-9]+(.[0-9]{2})?$ 
  
 21、 6.这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:
  
 ^[0-9]+(.[0-9]{1,2})?$ 
  
 22、 7.这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:
  
 ^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$ 
  
 23 、8.1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:
  
 ^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$ 
  
 24 、备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
  
 25 、xml文件:
  
 ^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
  
 26 、中文字符的正则表达式:
  
 [\u4e00-\u9fa5]
  
 27 、双字节字符:
  
 [^\x00-\xff]
  
 (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
  
 28 、空白行的正则表达式:\n\s*\r (可以用来删除空白行)
  
 29 、HTML标记的正则表达式:
  
 <(\S*?)[^>]*>.*?|<.*? /> (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)
  
 30 、首尾空白字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
  
 31 、腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
  
 32 、中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
  
 33、 IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址时有用)
❺ php 怎么用正则匹配时间
$str = '1970-01-01 08:33:32';
//将找到的保存到$match里
preg_match("/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/", $str, $match);
/*
match【0】保存整个匹配结果
match【1】-match【6】保存每个()匹配的结果
你只要array_shift(match)就去除了第一个
*/
array_shift($match);
//for test
print_r($match);
❻ PHP如何运用正则表达式更改日期
先正则找到日期字符串(中文的日期不行),然后用strtotime得到时间戳,利用改时间戳再次调用strtotime即可。
sample:
$str
=
"date:2012/01/01";
$reg
=
"/:(?<date>.*$)/";
preg_match($reg,
$str,
$match);
$time
=
date("Y-m-d",strtotime('yesterday',
strtotime($match['date'])));
var_mp($time);
❼ php 时间正则式的表示
最简单的正则 如 : \d{4}-\d{2}-\d{2}
但是实际情况却不是那么简单,,要考虑,有效性和闰年等问题.....
对于日期的有效范围,不同的应用场景会有所不同。MSDN中定义的DateTime对象的有效范围是:0001-01-01 00:00:00到9999-12-31 23:59:59。
UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z。
先考虑与年份无关的前三条规则,年份可统一写作
(?!0000)[0-9]{4}
下面仅考虑月和日的正则
1. 包括平年在内的所有年份的月份都包含1-28日
(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])
2. 包括平年在内的所有年份除2月外都包含29和30日
(0[13-9]|1[0-2])-(29|30)
3. 包括平年在内的所有年份1、3、5、7、8、10、12月都包含31日
(0[13578]|1[02])-31)
合起来就是除闰年的2月29日外的其它所有日期
(?!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)
接下来考虑闰年的实现
1 : 四年一闰
([0-9]{2}(0[48]|[2468][048]|[13579][26])
2 : 百年不闰,四百年再闰
(0[48]|[2468][048]|[13579][26])00
3 : 合起来就是所有闰年的2月29日
([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)
四条规则都已实现,且互相间没有影响,合起来就是所有符合DateTime范围的日期的正则
^((?!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)$
考虑到这个正则表达式仅仅是用作验证,所以捕获组没有意义,只会占用资源,影响匹配效率,所以可以使用非捕获组来进行优化。
^(?:(?!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)$
❽ php从一串字符串中用正则提取出年月日
d{4}/d{1,2}/d{1,2}如果你不是要求很严谨去判断日期的正确性的话,上面这个就足够了.
