2011-07-24 27 views
5

Estoy creando un validador de contraseñas que toma cualquier carácter pero espacios en blanco y con al menos 6 caracteres.Expresión regular cualquier carácter excepto un espacio en blanco

Después de buscar la mejor que le ocurrió es que este es el ejemplo: What is the regular expression for matching that contains no white space in between text?

Se rechaza cualquier espacio entre medio, pero sí permite iniciar y finalizar con un espacio. Quiero rechazar cualquier espacio en la cadena pasada.

He intentado esto, pero no funciona:

if (preg_match("/^[^\s]+[\S+][^\s]{6}$/", $string)) { 
    return true; 
} else { 
    return false; 
} 

Gracias.

+2

Dumb pregunta: ¿Por qué querría evitar que los usuarios usen un espacio en sus contraseñas? – Mike

Respuesta

6

Algo como esto:

/^\S{6,}\z/ 

puede ser citado como:

preg_match('/^\S{6,}\z/', $string) 

Todas las respuestas usando $ están equivocados (al menos sin ningún indicador especial). Debería usar \z en lugar de $ si no desea permitir un salto de línea al final de la cadena.

  • $ partidos final de la cadena o antes de un salto de línea al final de la cadena de (si no se utilizan modificadores)
  • \z partidos final de la cadena (independiente del modo multilínea)

De http://www.pcre.org/pcre.txt:

^   start of subject 
       also after internal newline in multiline mode 
\A   start of subject 
$   end of subject 
       also before newline at end of subject 
       also before internal newline in multiline mode 
\Z   end of subject 
       also before newline at end of subject 
\z   end of subject 
0

\S - Coincide con cualquier carácter que no sea de espacio en blanco. Equivalente a las categorías de caracteres Unicode [^\f\n\r\t\v\x85\p{Z}]. Si se especifica el comportamiento compatible con ECMAScript con la opción ECMAScript, \S es equivalente a [^ \f\n\r\t\v].

El inicio de la cadena que puede hacer: ^[ \t]+, y por fin: [ \t]+$ (ficha y espacios)

ETA:

Por cierto, que RegEx [\S+], pienso que usted está buscando: [\S]+

0

creo que debe estar bien utilizando los siguientes, que se correspondería con cualquier cadena de más de 1 carácter, sin espacios en blanco:

Puede ver la prueba aquí: http://regexr.com?2ua2e.

0

Pruebe esto. Esto hará coincidir al menos 6 caracteres que no sean espacios en blanco seguidos por cualquier cantidad de caracteres adicionales que no sean espacios en blanco.

^[^\s]{6}[^\s]*$ 
9

La expresión más simple:

^\S{6,}$ 

^ significa el inicio de la cadena
\S coincide con cualquier carácter que no sea un espacio en blanco
{6,} medio 6 o más
$ significa el final de la cadena

In PHP, que vería como

preg_match('/^\S{6,}$/', $string) 

Editar:

>> preg_match('/^\S{6,}$/', "abcdef\n") 
1 
>> preg_match('/^\S{6,}\z/', "abcdef\n") 
0 
>> preg_match('/^\S{6,}$/D', "abcdef\n") 
0 

Qtax es correcto. ¡Buena llamada! Aunque si está recibiendo información de un HTML <input type="text">, probablemente no tenga líneas nuevas.

+1

-1, mal, no use '$' en este caso, vea mi respuesta. – Qtax

Cuestiones relacionadas