Regla de validación de CakePHP: alfanumérica con espacios

Tengo un description campo en mi base de datos que acepta caracteres alfanuméricos y espacios, así como caracteres de nueva línea. Quiero establecer esa regla de validación en mi Server modelo.

Esto es lo que tengo ahora:

<?php

class Server extends AppModel {

    public $validate = array(
        // ...
        'description' => array(
            'characters' => array(
                'rule'     => 'alphaNumeric',
                'message'  => 'Alphanumeric characters only'
            )
        ),
        // ...
    );

}

¿Cómo puedo modificar esto para permitir espacios y nuevas líneas, así como caracteres alfanuméricos? Pensé que Cake tendría una regla de validación incorporada para esto, pero no puedo ver ninguna. ¿Necesito escribir el mío y usar alguna expresión regular?

Gracias.

preguntado el 04 de julio de 12 a las 00:07

3 Respuestas

alfanumérico en CakePHP significa caracteres alfanuméricos sin espacios. Por lo tanto, debe usar su propio patrón de expresiones regulares.

Ejemplo:

'description' => array(
    'characters' => array(
        'rule' => array('custom', '/^[a-z0-9 ]*$/i'),
        'message'  => 'Alphanumeric characters with spaces only'
    )
),

Respondido el 20 de Septiembre de 14 a las 07:09

No, CakePHP no puede cubrir todos los casos y el tuyo tampoco es tan común.

Ver http://api20.cakephp.org/view_source/validation#l-73 son solo caracteres y enteros.

Utiliza la

'rule'     => array('custom', 'your-regex-here'),

Debería ser fácil encontrar una expresión regular que coincida con su necesidad o copiar y modificar la de la clase de validación.

Respondido 04 Jul 12, 02:07

En cuanto a la respuesta: 'regla' => array('custom', '/([\w.-]+ )+[\w+.-]/'), ¡parece funcionar bien para mí! - Vael Victus

Si observa la función alfanumérica en lib/cake/utility/validation.php, tiene:

/^[\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]+$/Du

Esto coincide con las letras y dígitos alfanuméricos Unicode como Владимир (en Rusia), 김정 (en Corea), 习近平 (en China), etc.

Así que hice mi patrón alfanumérico personalizado con el CakePhp predeterminado y para nombres como O'Brian, François, Mary-Louise, Juan Martin...

/^(?![\s'-])(?:[\s'-]{0,1}[\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}])+$/Du

Ahora coincide con nombres con ', - y espacios. Pero no si son consecutivos, en la primera o en la última posición (porque no creo que esto pueda existir^^)

Espero que esto ayude a alguien :)

Editar: Sin embargo, a veces no acepta algunos caracteres no latinos acentuados como en cirílico и́ que en realidad son dos caracteres и y ́. Y ́ está en la categoría unicode de Mark, Nonspacing Mn (y Mn no está en este patrón de expresiones regulares). Este tipo de excepción no es raro en los idiomas asiáticos (chino, coreano, hindi...) porque están llenos de caracteres Mn unicode.

FD

Respondido 13 Oct 15, 00:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.