validar solo regulares regular preg_match numeros letras expresiones expresion espacios espacio enteros blanco alfanumerico php regex preg-match

regulares - PHP preg_match-solo permite cadenas alfanuméricas y-_ caracteres



preg_match php (6)

¿Por qué usar regex? PHP tiene alguna funcionalidad incorporada para hacer eso

<?php $valid_symbols = array(''-'', ''_''); $string1 = "This is a string*"; $string2 = "this_is-a-string"; if(preg_match(''//s/'',$string1) || !ctype_alnum(str_replace($valid_symbols, '''', $string1))) { echo "String 1 not acceptable acceptable"; } ?>

preg_match(''//s/'',$username) verificará si hay espacio en blanco

!ctype_alnum(str_replace($valid_symbols, '''', $string1)) comprobará si hay valid_symbols

Necesito la expresión regular para comprobar si una cadena solo contiene números, letras, guiones o guiones bajos

$string1 = "This is a string*"; $string2 = "this_is-a-string"; if(preg_match(''******'', $string1){ echo "String 1 not acceptable acceptable"; // String2 acceptable }


Aquí hay un equivalente de la respuesta aceptada para el mundo UTF-8.

if (!preg_match(''/^[/p{L}/p{N}_-]+$/u'', $string)){ //Disallowed Character In $string }

Explicación:

  • [] => definición de la clase de caracteres
  • p {L} => coincide con cualquier tipo de letra de cualquier idioma
  • p {N} => coincide con cualquier tipo de carácter numérico
  • _- => coincide subrayado y guión
  • + => Cuantificador - Coincide entre uno a tiempos ilimitados (codicioso)
  • / u => modificador Unicode. Las cadenas de patrón se tratan como UTF-16. También hace que las secuencias de escape coincidan con los caracteres Unicode

Tenga en cuenta que si el guión es el último carácter de la definición de clase, no es necesario que se escape . Si el guión aparece en otra parte de la definición de la clase, debe escaparse , ya que se verá como un carácter de rango en lugar de un guión.


Aquí hay un método funky no regex que usa str_word_count() :

if($string===str_word_count($string,1,''-_0...9'')[0]){ // ^^^^^^^--- characters to allow, see documentation echo "pass"; }else{ echo "fail"; }

Ver el enlace de demostración donde muestro cómo las diferentes entradas dan como resultado diferentes matrices de salida.


Código:

if(preg_match(''/[^a-z_/-0-9]/i'', $string)) { echo "not valid string"; }

Explicación:

  • [] => definición de la clase de caracteres
  • ^ => negar la clase
  • az => caracteres de ''a'' a ''z''
  • _ => subrayar
  • - => guión ''-'' (Necesitas escapar de él)
  • 0-9 => números (de cero a nueve)

El modificador ''i'' al final de la expresión regular es para ''no distingue mayúsculas y minúsculas'' si no pone que tendrá que agregar los caracteres en mayúscula en el código antes haciendo AZ


/w/- es probablemente la mejor pero aquí solo otra alternativa
Utilice [:alnum:]

if(!preg_match("/[^[:alnum:]/-_]/",$str)) echo "valid";

demo1 | demo2


if(!preg_match(''/^[/w-]+$/'', $string1)) { echo "String 1 not acceptable acceptable"; // String2 acceptable }