es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Validar el idioma japonés con el mismo significado en Laravel.

Tengo un nombre validado de escuelas como

'nombre' => 'required|string|max:255|unique:escuelas,nombre'

mi registro en la base de datos

はのい

mi entrada

ハノイ

pero me da un error, creo que porque tienen el mismo significado

“El nombre ya ha sido tomado”

pero quiero que pase la validación, ¿alguien puede ayudarme?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una solución potencial es agregar una regla de validación personalizada para manejar este caso específico. Por ejemplo, podrías crear una nueva regla que compare la representación fonética de la entrada con los registros existentes en la base de datos, en lugar de una comparación directa de cadenas.

    Para implementar esto, podrías utilizar una biblioteca como PHP Intl, que proporciona funciones para convertir texto en representaciones fonéticas. Luego, modificarías la regla de validación para usar esta regla personalizada en lugar de la regla unique predeterminada de Laravel.

    Aquí tienes un ejemplo de cómo podrías implementar la regla de validación personalizada:

    use Illuminate\Contracts\Validation\Rule;
    use Collator; // necesario para las funciones de PHP Intl
    
    class UniquePhonetic implements Rule
    {
        protected $table;
        protected $column;
    
        public function __construct($table, $column)
        {
            $this->table = $table;
            $this->column = $column;
        }
    
        public function passes($attribute, $value)
        {
            $collator = new Collator('en_US'); // establecer la configuración regional para el procesamiento fonético
            $phonetic = $collator->getSortKey($value); // obtener la representación fonética de la entrada
    
            $result = DB::table($this->table)
                ->whereRaw('LOWER(phonetic)' . ' = ?', [strtolower($phonetic)]) // comparar la representación fonética
                ->value($this->column);
    
            return is_null($result);
        }
    
        public function message()
        {
            return 'El campo :attribute ya ha sido tomado.';
        }
    }
    

    Luego, podrías usar la nueva regla de validación personalizada de la siguiente manera:

    'name' => ['required', 'string', 'max:255', new UniquePhonetic('shools', 'name')],
    

    Con este enfoque, la validación ahora pasaría para はのい y ハノイ ya que tienen la misma representación fonética. Sin embargo, es importante tener en cuenta que este enfoque puede tener limitaciones y compromisos basados en el idioma y el texto específico que se está procesando.

Comments are closed.