Saya ingin membuat nama bidang ditulis dalam segi empat

Sama

  • "andy hosam rami entaida" atau
  • "حسام ا لى"

Saya nampan

            'name' => 'regex:/^[\wء-ي]+\s[\wء-ي]+\s[\wء-ي]+\s[\wء-ي]+/

Dalam bahasa inggris semua benar dimasukkan ke dalam bahasa arab adalah salah

Regex benar saya mengujinya mendengarnya regexr.com/57s61

Saya bisa lakukan dengan php dengan cara lain , jadi bagaimana bisa menulis di laravel ?

if(count(explode(' ',$name)) < 4)
  {
     $error[] ='enter full name with 4 words';
  }
3
Hosam Elzagh 5 Juli 2020, 07:09

2 jawaban

Tidak ada metode khusus di laravel untuk melakukan ini. Anda dapat menggunakan fungsi kustom pengontrol atau skrip php Anda sendiri untuk mencapai ini.

Menggunakan metode PHP

Anda dapat melakukannya dengan menggunakan trim() explode dan sizeOf untuk memastikan kata-katanya selalu 4.

Ini demo yang berfungsi untuk Anda.

Jalankan yang berikut ini di PHP Anda dan Anda harus baik.

//Actual string
$fullName = "حسام احممد محمد متولى";

//Trim the name input
$trimString = trim($fullName);

//Remove Spaces
$nameArray = explode(" ", $trimString);

//Get the count
$count = sizeof($nameArray);

if($count < 4)  {
  echo "Enter full name with 4 words";
} else {
  echo "Looking good";
}

Menggunakan Pengontrol

public function store(){

    $fullName = Input::get('fullname');

    if(count(explode(' ',  $fullName)) < 4)
        $error[] ='enter full name with 4 words';
}
0
AlwaysHelping 5 Juli 2020, 04:26

Anda dapat membuat kelas Aturan khusus untuk melakukan validasi khusus, secara enkapsulasi.

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class NumWords implements Rule
{
    private $attribute;
    private $expected;
    
    public function __construct(int $expected)
    {
        $this->expected = $expected;
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        $this->attribute = $attribute;
        $trimmed = trim($value);
        $numWords = count(explode(' ', $trimmed));
        return $numWords === $this->expected;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The '.$this->attribute.' field must have exactly '.$this->expected.'  words';
    }
}

Kemudian Anda dapat menggunakannya di mana saja dalam validasi, seperti di bawah ini:

    public function rules()
    {
        return [
            'name' => [ 'required', 'string', new NumWords(4)],
        ];
    }
0
Kurt Friars 5 Juli 2020, 04:36