验证正则表达式的字符串

时间:2013-05-09 18:31:03

标签: php regex

我想用正则表达式验证文件路径。到目前为止,我已经想出了这个:

preg_match('/[^A-Za-z0-9\.\/\\\\]/', $string);

所以如果字符串有除A-Z,a-z,0-9,dot,\和/

之外的任何其他字符,它将返回1

如果字符串中有两个以上的点,或者如果点位于字符串的末尾,我该怎么做才能返回1?

我如何才允许:但仅当它作为第二个字符存在且后跟\/时才允许c:\file。例如{{1}}应该有效

2 个答案:

答案 0 :(得分:6)

对于前两个要求:

preg_match('/[^A-Za-z0-9\.\/\\\\]|\..*\.|\.$/', $string);

如果有两个以上的点,\..*\.将匹配。如果最后有一个点,\.$将匹配。通过用|分隔这些部分(包括你的原始正则表达式),它将使正则表达式匹配任何一个表达式(这称为交替)。

最后一个要求有点棘手,因为如果我理解正确,如果有:则需要返回1,除非唯一的冒号是第二个字符,然后是{{1} }或\。以下正则表达式(作为PHP字符串)应该这样做:

/

或与其他正则表达式结合使用(请注意,我们还必须将'/:(?!(?<=^[a-zA-Z]:)[\/\\\\])/' 添加到第一个字符类中):

:

以下是对最后一篇文章的解释:

preg_match('/[^A-Za-z0-9\.\/\\\\:]|\..*\.|\.$|:(?!(?<=^[a-zA-Z]:)[\/\\\\])/', $string);

答案 1 :(得分:1)

如果这是针对您服务器上的文件,那么这就是realpath的用途。它将解析对...的引用,并检查该文件是否存在于该路径中。如果文件不存在则返回false,如果确实存在,则返回新路径。