用于查找有效文件名的正则表达式

Ora*_*ind 15 php regex validation preg-match

我想检查字符串是否是文件名(名称为DOT ext).

文件名不能包含 / ? * : ; { } \

你能建议我在preg_match()中使用正则表达式吗?

Ric*_*dle 17

干得好:

"[^/?*:;{}\\]+\\.[^/?*:;{}\\]+"
Run Code Online (Sandbox Code Playgroud)

"一个或多个不是这些字符的字符,然后是一个点,然后是一些不是这些字符的字符."

(只要你确定这个点确实是必需的 - 如果没有,那就简单地说: "[^/?*:;{}\\]+"

  • @Richie,你真的需要在点分隔符之前的第二个反斜杠吗?不应该是......} \\\] + \.[^ /?.... (2认同)
  • @Rob Wells:这是必要的,因为PHP字符串也使用反斜杠作为转义字符.PHP字符串中的"\\"在正则表达式中被翻译为"\".那个"\." 被翻译为"\".由于"\"这一事实导致巧合.对PHP毫无意义,因此保持不变.尽管如此,它还是不要躲避反斜杠. (2认同)
  • 为什么不包括定界符?`/^[^\/\?\*:;{}\\\]+\.[^\/\?\*:;{}\\\]+$/` (2认同)

heg*_*mon 6

$a = preg_match('=^[^/?*;:{}\\\\]+\.[^/?*;:{}\\\\]+$=', 'file.abc');

^ ... $ - begin and end of the string
[^ ... ] - matches NOT the listed chars.
Run Code Online (Sandbox Code Playgroud)