Laravel - 如何验证 Cyrillic(西里尔字母)

3

我需要检查输入是否为UTF-8西里尔字符。这样的东西存在吗?

$this->validate($request, [
   'name' => 'required|cyrillic'
]);

如果不行,我该如何实现呢?

检查输入是否为西里尔字母和检查输入是否为UTF-8西里尔字母是两个不同的问题。 - apokryfos
5个回答

4

您需要创建自己的自定义验证规则:

https://laravel.com/docs/5.1/validation#custom-validation-rules

<?php

namespace App\Providers;

use Validator;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Validator::extend('cyrillic', function ($attribute, $value, $parameters, $validator) {
            return preg_match('/[А-Яа-яЁё]/u', $value);
        });
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

将链接作为答案发布并不是一个好主意。链接会过时和失效。最好的方法是从链接中提取相关部分。 - apokryfos
感谢您的关注。 - Pyton
1
让这个更好的是 Validator::extend('cyrillic', function($attribute, $value, $parameters, $validator) { return preg_match('/[А-Яа-яЁё]/u', $text); }); 而不是通用的 foo` 东西。这将为问题提供一个完整的答案。 - apokryfos

2
function isCyrillic($text) {
    return preg_match('/[А-Яа-яЁё]/u', $text);
}

如果遇到西里尔字母,将返回true。

这不是问题的答案。这并没有解决Laravel问题。 - IllegalPigeon

2

使用 @Hearner 的 答案 中的正则表达式,您可以将正则表达式添加到您的规则中,但是在使用正则表达式时,应该将规则添加到一个数组中,因为 | 字符在正则表达式中具有特殊含义:

$this->validate($request, [
   'name' => array('required', 'regex:/[А-Яа-яЁё]/u')
]);

1
在我的情况下,laravel 5.2验证与
[А-Яа-я]
不正确地跳过一些符号,例如:
'У ц ш щ'等。
这不是一个完美的解决方案,但在我的情况下它可以正常工作:
$text_regex = '/^[А-ЯЦцУуШшЩщФфЫыРрЭэЧчТтЬьЮюЪъХхЁа-яёa-zA-Z0-9\- @%;()\$\.\,\"\']+$/';

0

尝试

$this->validate($request, [
   'name' => ['required', 'regex:/^[А-Яа-яЁё]$/u'],
]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接