Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/10/2016, 04:58
weltxo
 
Fecha de Ingreso: abril-2013
Mensajes: 75
Antigüedad: 11 años, 7 meses
Puntos: 2
Expresión regular con 1 solo guión/guión bajo

Hola amigos, estoy trabajando con el maravilloso framework Symfony y el FOSUserBundle. Para crear un atributo username, he introducido lo siguiente:

Código:
    /**
     * @Assert\Regex(
     *     pattern="/^[a-z0-9_-]{4,15}$/",
     *     match=true,
     *     message="fos_user.username.regex"
     * )
     * 
     * @var string
     */
    protected $username;
Según el pattern anterior, es válida cualquier cadena, de longitud entre 4 y 15 que contenga letras, números, guiones y guiones bajos.

Quiero personalizar algo más este patrón, limitando el número de guiones/guiones bajos de la siguiente manera:

que solamente se pueda incluir como máximo un guión o un guión bajo (pero no los dos a la vez), y que no sea la primera ni la última posición, es decir:

es válido ---> usuario1
es válido ---> usuario-1
es válido ---> usuario_1

no válido ---> usu-ario_1
no válido ---> -usuario1
no válido ---> _usuario1
no válido ---> usuario1-
no válido ---> usuario1_

Espero alguien pueda ayudarme. Gracias por adelantado.