2011-01-25 19 views
6

Sono un dilettante alla regex, come posso consentire gli spazi (non importa quanti) in questa espressione regolare?Come posso consentire spazi in questa espressione regolare?

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

Stai permettendo ora sapces – Mchl

+1

Quell'espressione regolare consente già degli spazi. – CanSpice

+1

Penso che la domanda sia confusa a causa di un doppio negativo.Vuoi che la tua espressione regolare consenta spazi o la condizione generale per consentire gli spazi? –

risposta

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

Nota che ho messo lo spazio prima del trattino. Se lo spazio fosse dopo il trattino, dovrei specificare un intervallo di caratteri da underscore a space. (. Problema anche evitabile inserendo un backslash prima del trattino per sfuggire)

Ciò presuppone che cosa si intende per "consentire" è: questa regex viene utilizzata per convalidare una stringa di caratteri, e se partite , quindi la stringa di caratteri è non consentita (quindi return FALSE). Quindi i caratteri nella classe di caratteri negata ([^...]) sono in realtà caratteri consentiti. (Questo sta causando un po 'di confusione generale in questa domanda.)

1

Se è necessario per consentire solo lo spazio di cui ha bisogno '/ /'

Se è necessario consentire a qualsiasi carattere spazio bianco (spazio, tab, newline) - uso '/ \ s /'

E se è necessario aggiungere uno spazio per il vostro modello (significa ignorare spazio) - uso/[^ a-Za-z0-9_ \ -]/

2
Non

tanto una risposta alla tua domanda, ma un sito che trovo utile per checking regex expressions. Spiega anche che cosa fa ogni singola parte dell'espressione quando vi si posiziona sopra nel campo di immissione.

15

il \s nel expretion regolare come questo '/[^A-Za-z0-9_-\s]/'
significa lo spazio

2

La tua domanda non è chiara. L'espressione regolare, così com'è, avrà successo se lo $str contiene un carattere diverso da A-Za-z0-9_-. Poiché uno spazio non è uno di questi caratteri, l'espressione regolare corrisponderà e l'intera istruzione restituisce FALSE.

Se questo non è ciò che si vuole, e si desidera l'espressione regolare per abbinare se $str ha alcun carattere che non è in A-Za-z0-9_- o uno spazio, allora avete bisogno di cambiare a A-Za-z0-9_ - (notare lo spazio tra la sottolineatura e il trattino). Quindi quando la tua stringa ha un carattere che non è A-Za-z0-9_ -, l'espressione regolare corrisponderà e la tua dichiarazione restituirà FALSE. Se la stringa è composta interamente da A-Za-z0-9_ -, l'espressione regolare non riuscirà a corrispondere e l'elaborazione continuerà alla riga successiva.

Edit: Ecco un esempio: se la stringa è abc123def, attualmente l'espressione regolare non corrisponderanno e non tornerà FALSE. Se la stringa è abc123 def, l'espressione regolare corrisponderà e l'istruzione restituirà FALSE. Se si modifica la classe di caratteri su A-Za-z0-9_ -, l'espressione regolare non riuscirà a corrispondere sia per abc123def e abc123 def, che non verrà restituita FALSE.

Problemi correlati