可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have the following code in my Laravel 5 app:
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 underscores within them. However, my regex is not working, it fails even on a single letter. What am I doing wrong?
回答1:
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.
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.
Why is it better than 'alpha_dash'
: you can further customize this pattern.
回答2:
use laravel rule,
public function store(Request $request){ $this->validate($request, ['filename' => 'alpha_dash']); }
Laravel validation rule for alpha numeric,dashes and undescore
回答3:
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', ]);
回答4:
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 +
.