在 Laravel 中仅验证字母数字字符

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/38646494/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 14:13:40  来源:igfitidea点击:

Validate only alphanumeric characters in Laravel

phpregexlaravellaravel-5laravel-validation

提问by Alexander Lomia

I have the following code in my Laravel 5 app:

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

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

My intentions are to permit filenames with only alphanumeric characters, dashes and underscoreswithin them. However, my regex is not working, it fails even on a single letter. What am I doing wrong?

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

回答by Wiktor Stribi?ew

You need to make sure the pattern matches the whole input string. Also, the alphanumeric and an underscore symbols can be matched with \w, so the regex itself can be considerably shortened.

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

I suggest:

我建议:

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

Details:

详情

  • ^- start of string
  • [\w-]*- zero or more word chars from the [a-zA-Z0-9_]range or -s
  • $- end of string.
  • ^- 字符串的开始
  • [\w-]*-[a-zA-Z0-9_]范围或-s 中的零个或多个字字符
  • $- 字符串的结尾。

Why is it better than 'alpha_dash': you can further customize this pattern.

为什么比'alpha_dash':您可以进一步自定义此模式。

回答by Akram Wahid

use laravel rule,

使用 Laravel 规则,

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

Laravel validation rule for alpha numeric,dashes and undescore

字母数字、破折号和下划线的 Laravel 验证规则

回答by djt

Might be easiest to use the built in alpha-numeric validation:

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

https://laravel.com/docs/5.2/validation#rule-alpha-num

$validator = Validator::make($request->all(), [
    'filename' => 'alpha_num',
]);

回答by Daniel Waghorn

You forgot to quantify the regex, it also wasn't quite properly formed.

您忘记量化正则表达式,它的格式也不太正确。

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

This will accept empty filenames; if you want to accept non-empty only change the *to +.

这将接受空文件名;如果你想接受非空只更改*+.