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;
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;
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.)
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_ \ -]/
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.
la \s
en el expretion regular como este '/[^A-Za-z0-9_-\s]/'
significa el espacio
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
.
Usted está permitiendo sapces ahora – Mchl
Esa expresión regular ya permite espacios. – CanSpice
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? –