我需要知道这行代码的作用,试图找出它,因为我必须用preg_match()构建它,但我不完全理解它:
ereg("([0-9]{1,2}).([0-9]{1,2}).([0-9]{4})", $date)
我知道它查日期,但我不知道用什么方法。
thanks for some help
让我们来分析一下:
([0-9]{1,2})
查找从0到9的数字(-
在括号[]
中表示一个范围),可以有1个或2个。
.
查找任何单个字符
([0-9]{1,2})
查找从0到9的数字,可以有1或2个
.
查找任意单个字符
([0-9]{4})
查找从0到9的数字,并且一行中必须有4个
所以它正在查找以下任意格式的日期:
- 04 18 1973
- 04-18-1973
- 04/18/1973
- 04.18.1973
More将符合该模式,因此对于它应该验证的内容来说,它不是一个很好的正则表达式。有很多这种格式的匹配日期的正则表达式模式样本,所以如果你谷歌一下,你很快就会得到一个PCRE。
这是一个相对简单的正则表达式(regex)。如果您要使用regex,那么我建议您花一点时间学习它的语法。一个很好的学习起点是http://regular-expressions.info。
"正则表达式"或"regex"是一种用于搜索字符串的模式匹配语言。有许多方言,它们大多相当相似,但也有一些差异。PHP开始使用ereg()
系列函数,使用一种特定的方言,然后切换到preg_xx()
函数,使用稍微不同的正则表达式方言。
两者在语法上有一些不同,这对学习是有帮助的,但它们是相当小的。事实上,对你来说好消息是,这里的模式在两者之间几乎是相同的。
除了模式本身之外,您需要知道的唯一其他主要区别是preg_match()
中的模式必须在模式字符串的两端有一对分隔字符。最常用的字符是斜杠(/
)。
所以在这种情况下,你所需要做的就是把ereg
换成preg_match
,并在模式的两端添加斜杠:
$result = preg_match("/([0-9]{1,2}).([0-9]{1,2}).([0-9]{4})/", $date);
^ ^
slash here and here
它仍然有助于理解模式正在做什么,但是为了快速获胜,在这种情况下可能需要做的就是这些。其他情况可能更复杂,但大多数情况都很简单。
去阅读我之前链接的regular-expressions.info网站;这会对你有帮助的。
然而,我要补充的一点是,这里给出的模式实际上写得很糟糕。它打算匹配一个日期字符串,但会匹配很多它可能不想匹配的东西。您可以通过找到一个更好的正则表达式来匹配日期来修复它,但是完全不需要正则表达式就可以编写代码——PHP内置了一些非常好的日期处理功能。您需要考虑它周围的代码并理解它在做什么,但是完全有可能将整个东西替换为这样的内容:
$dateObject = DateTime::CreateFromFormat($date, 'd.M.Y');
看起来它在匹配中几乎是不可知的。
您可以将其解释为mm.dd.yyyy或dd.mm.yyyy。如果您实际上试图匹配/验证一个日期,我会考虑修改它,因为00.00.0000将是一个匹配,但是一个无效的数据,超出了可能的历史上下文。
编辑:我忘了。这做同样的,我只替换[0-9]由d,点(匹配所有)由d(一个非数字,但可以替换它由。或(。-])
preg_match("~d{2}Dd{2}Dd{4}~", $date)