/ / PHP - Regex: necesito ayuda para construir regex de acuerdo con estas reglas - php, regex

PHP - Regex: necesito ayuda para construir regex de acuerdo con estas reglas - php, regex

Necesito ayuda para construir una expresión regular para preg_match de acuerdo con estas reglas:

  1. Primer y último carácter / dígito solamente.
  2. espacio vacío no permitido
  3. char puede ser solo - letra / dígito / "-" / "_" / "."

Ejemplos legales:

  1. b.t612_rt
  2. rut-be
  3. rut7565

Ejemplo no legal:

  1. .btr78; btr78- (primero / últimos caracteres permitidos)
  2. inicio fin; inicio fin; (cualquier espacio vacío)
  3. tr $ be; tr * rt; tr / tr ... (caracteres no permitidos)

Edición: elimino la regla 4 con los caracteres "_" "-" ".

por favor, ayúdame.

Gracias

Respuestas

3 para la respuesta № 1

Prueba esta expresión regular:

^[A-Za-z0-9]+([-_.][A-Za-z0-9]+)*$

Esto coincide con cualquier secuencia que comience con al menos una letra o un dígito (^[A-Za-z0-9]+) que pueden ir seguidas de cero o más secuencias de una de -, _, o . ([-_.]) que debe ir seguido de al menos una letra o dígito ([A-Za-z0-9]+)


2 para la respuesta № 2

Prueba esto:

^[p{L}p{N}][p{L}p{N}_.-]*[p{L}p{N}]$

En PHP:

if (preg_match(
"%^               # start of string
[p{L}p{N}]      # letter or digit
[p{L}p{N}_.-]*  # any number of letters/digits/-_.
[p{L}p{N}]      # letter or digit
$                 # end of the string.
%xu",
$subject)) {
# Successful match
} else {
# Match attempt failed
}

Longitud mínima de la cadena: dos caracteres.


1 para la respuesta № 3

Esto parece funcionar bien para los ejemplos proporcionados: $patt = "/^[a-zA-Z0-9]+([-._][a-zA-Z0-9]+)*$/";


1 para la respuesta № 4

Bueno, para cada una de tus reglas:

  1. Primera y última letra / dígito:

    ^[a-z0-9]
    

    y

    [a-z0-9]$
    
  2. espacio vacío no permitido (no se necesita nada, ya que estamos "haciendo una coincidencia positiva y no permitimos ningún espacio en blanco en ninguna parte):

  3. Sólo letras / dígitos / - / _ /.

    [a-z0-9_.-]*
    
  4. No hay símbolos vecinos:

    (?!.*[_.-][_.-])
    

Así que, todos juntos:

/^[a-z0-9](?!.*[_.-][_.-])[a-z0-9_.-]*[a-z0-9]$/i

Pero con todas las expresiones regulares, hay múltiples soluciones, así que pruébalo ...

Edición: para su edición:

/^[a-z0-9][a-z0-9_.-]*[a-z0-9]$/i

Simplemente elimine la sección de la regla que desea cambiar / remoto. es fácil...