【问题标题】:regex for windows filenames laravel 4.2Windows文件名laravel 4.2的正则表达式
【发布时间】:2016-11-16 19:49:56
【问题描述】:

我有这个控制器来更新文件的文件名。起初,我不知道编辑文件名时的某些验证。所以重命名时出现错误。所以现在我要做的是在我的验证中实现一个正则表达式。

如下所示:

$rules = array(
        'eFile' => 'required|min:2|max:200| regex: /^(?!\.)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn$)[^\|\*\?\\:<>/$"]*[^\.\|\*\?\\:<>/$"]+$/ | unique:nsa_fileuploads,filename,' . $id . ',fileid'
    );

正则表达式模式:

regex: /^(?!\.)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn$)[^\|\*\?\\:<>/$"]*[^\.\|\*\?\\:<>/$"]+$/

但是一旦执行,我得到以下错误:

preg_match(): 没有找到结束分隔符'/'

关于我做错了什么有什么想法吗?

【问题讨论】:

  • 可能是您的/ 未转义。试试这个:/^(?!\.)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn$)[^\|\*\?\\:&lt;&gt;\/$"]*[^\.\|\*\?\\:&lt;&gt;\/$"]+$/
  • 你好@Ohgodwhy!我试过了,但我仍然收到preg_match(): No ending delimiter '/' found 错误
  • 嗨@WiktorStribiżew 我也找到了preg_match(): No ending delimiter ''我还尝试了您提供的regex101链接中的其他字符@ , % ,但同样的错误:(
  • 尝试使用数组:'eFile' =&gt; ['required', 'min:2', 'max:200', 'regex:/^(?!\.)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn$)[^|*?\\:&lt;&gt;\/$"]*[^.|*?‌​\\:&lt;&gt;\/$"]+$/', 'unique:nsa_fileuploads,filename,' . $id . ',fileid' ]

标签: php regex laravel laravel-4


【解决方案1】:

您可以在此处使用数组,因为您的模式包含管道符号。即使它不是交替运算符并且在字符类中,管道requires using an array

使用

'eFile' => [
  'required', 'min:2', 'max:200', 
  'regex:/^(?!\.)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn$)[^|*?\\:<>\/$"]*‌​[^.|*?‌​\\:<>\/$"]+$/', 
  'unique:nsa_fileuploads,filename,' . $id . ',fileid' 
]

至于正则表达式本身,请注意您不必转义除 \(以及 -(不在 char 类的开头/结尾)和 ^(如果不在字符类的开头)和](如果不是在字符类的开头))和/(因为它是一个正则表达式分隔符)在正则表达式模式中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    相关资源
    最近更新 更多