【问题标题】:Validate only alphanumeric characters in Laravel在 Laravel 中仅验证字母数字字符
【发布时间】:2016-12-03 10:38:47
【问题描述】:

我的 Laravel 5 应用中有以下代码:

public function store(Request $request){
    $this->validate($request, ['filename' => 'regex:[a-zA-Z0-9_\-]']);
}

我的意图是允许文件名中包含只有字母数字字符、破折号和下划线。但是,我的正则表达式不起作用,即使在一个字母上也失败了。我做错了什么?

【问题讨论】:

  • 试试'regex:/^[a-zA-Z0-9_-]*$/' 或只是'regex:/^[\w-]*$/'
  • @WiktorStribiżew 它有效!谢谢,但我的错误是什么?
  • 重点是整个字符串都应该匹配。
  • 记录在案的错误是缺少模式分隔符 (/.../) 和锚点 (^...$)。

标签: php regex laravel laravel-5 laravel-validation


【解决方案1】:

使用 laravel 规则,

    public function store(Request $request){
    $this->validate($request, ['filename' => 'alpha_dash']);
}

Laravel validation rule for alpha numeric,dashes and undescore

【讨论】:

  • 谢谢!其实是alpha_dash
  • 对不起,我已经链接了正确的,但是添加了错误的,反正我修改了上面的代码..
【解决方案2】:

您需要确保模式与整个输入字符串匹配。此外,字母数字和下划线符号可以与\w 匹配,因此正则表达式本身可以大大缩短。

我建议:

'regex:/^[\w-]*$/'

详情

  • ^ - 字符串开头
  • [\w-]* - [a-zA-Z0-9_] 范围或 -s 中的零个或多个单词字符
  • $ - 字符串结束。

为什么比'alpha_dash':你可以进一步自定义这个模式。

【讨论】:

  • 谢谢,这是最完整的答案,即使提到了alpha_dash
【解决方案3】:

你忘了量化正则表达式,它的格式也不完全正确。

public function store(Request $request){
    $this->validate($request, ['filename' => 'regex:/^[a-zA-Z0-9_\-]*$/']);
}

这将接受空文件名;如果您想接受非空,只需将* 更改为+

【讨论】:

    【解决方案4】:

    可能最容易使用内置的字母数字验证:

    https://laravel.com/docs/5.2/validation#rule-alpha-num
    
    $validator = Validator::make($request->all(), [
        'filename' => 'alpha_num',
    ]);
    

    【讨论】:

    • 谢谢!其实是alpha_dash
    猜你喜欢
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多