2011-01-25 15 views
6

Soy tan aficionado en regex, ¿cómo permito espacios (no importa cuántos) en esta expresión regular?¿Cómo permito espacios en esta expresión regular?

if(preg_match('/[^A-Za-z0-9_-]/', $str)) return FALSE; 
+1

Usted está permitiendo sapces ahora – Mchl

+1

Esa expresión regular ya permite espacios. – CanSpice

+1

Creo que la pregunta es confusa debido a un doble negativo.¿Desea que su expresión regular permita espacios, o la condición general para permitir espacios? –

Respuesta

17
if(preg_match('/[^A-Za-z0-9_ -]/', $str)) return FALSE; 

Nota que puse el espacio antes del guión. Si el espacio estuviera después del guión, estaría especificando un rango de caracteres de guión bajo a espacio. (. Edición también evadable poniendo una barra invertida antes del guión para escapar de ella)

Esto es suponiendo que lo que entendemos por "permitir" es: esta expresión regular se utiliza para validar una cadena de caracteres, y si partidos , entonces la cadena de caracteres es desautorizada (de ahí return FALSE). Por lo tanto, los caracteres de la clase de caracteres negados ([^...]) son en realidad los caracteres permitidos. (Esto está causando cierta confusión general en esta pregunta.)

1

Si necesita permitir sólo el espacio que necesita '/ /'

Si necesita permitir que cualquier carbón blanco (espacio, tabulación, nueva línea) - uso '/ \ s /'

Y si es necesario agregar un espacio a su patrón (significa ignorar el espacio) - uso/[^ a-Za-z0-9_ \ -]/

2
No

tanto una respuesta a su pregunta, pero un sitio que encuentro útil para checking regex expressions. También explica qué hace/significa cada parte de la expresión mientras se desplaza sobre ella en el campo de entrada.

15

la \s en el expretion regular como este '/[^A-Za-z0-9_-\s]/'
significa el espacio

2

Su pregunta no es clara. La expresión regular, tal como está, tendrá éxito si $str tiene cualquier carácter que no sea A-Za-z0-9_-. Como un espacio no es uno de estos caracteres, la expresión regular coincidirá, y toda la declaración devuelve FALSE.

Si esto no es lo que quiere, y quiere que su expresión regular para que coincida si $str tiene cualquier carácter que no está en A-Za-z0-9_- o un espacio, entonces usted necesita para cambiarlo a A-Za-z0-9_ - (tenga en cuenta el espacio entre el guión y el guion). Por lo tanto, cuando la cadena tiene un carácter que no es A-Za-z0-9_ -, la expresión regular coincidirá y su extracto devolverá FALSE. Si su cadena está compuesta por completo de A-Za-z0-9_ -, la expresión regular no coincidirá y su procesamiento continuará a la siguiente línea.

Editar: He aquí un ejemplo: Si la cadena es abc123def, actualmente la expresión regular no coincide y no volverá FALSE. Si su cadena es abc123 def, la expresión regular coincidirá y la instrucción devolverá FALSE. Si cambia la clase de caracteres a A-Za-z0-9_ -, la expresión regular no coincidirá con abc123def y abc123 def, y no devolverá FALSE.

Cuestiones relacionadas