2013-01-31 21 views
5

Ho il requisito di consentire caratteri alfanumerici e certi altri per un campo. Sto usando questa espressione regolare:RegEx per includere caratteri alfanumerici e speciali

"^[[email protected]#$&()-`.+,/\"]*$". 

I caratteri speciali consentiti sono ! @ # $ & () - ‘ ./+ , “

Ma quando prova lo schema con una stringa "test_for_extended_alphanumeric", la stringa passa il test. Non ho "_" consentito nel modello. Che cosa sto facendo di sbagliato?

risposta

6

avete bisogno di sfuggire il trattino:

"^[[email protected]#$&()\\-`.+,/\"]*$" 

Se non sfuggire che allora vuol dire una serie di personaggi, come a-z.

+0

Grazie per la rapida risposta. Questo ha aiutato. –

0

I trattini nelle classi di caratteri indicano un intervallo a meno che non siano sfuggiti o all'inizio o alla fine della classe di caratteri. Se si desidera includere i trattini, è in genere una buona idea di metterli nella parte anteriore in modo che non hanno nemmeno bisogno di preoccuparsi di fuga:

^[[email protected]#$&()`.+,/\"]*$ 

A proposito, _ fa davvero cadere tra il ) e l'apice inverso in ASCII:

http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters

0

nella classe personaggio )-' viene interpretato come un intervallo nello stesso modo come ad esempio a-z, si riferisce quindi a qualsiasi carattere con un codice ASCII decimale da 41 ) a 96 '.

Dal _ ha il codice 95, è all'interno del campo e quindi consentito, come lo sono <, =, > ecc

Per evitare questo è possibile sfuggire alla -, cioè \-, o mettere il - a sia l'inizio o la fine della classe di caratteri:

/^[[email protected]#$&()`.+,/"-]*$/ 

non c'è bisogno di sfuggire alla ", e notare che, poiché si utilizza il * quantificatore, una e mpty string supererà anche il test.

0

Utilizzare questo regex, questo funzionerà.

/\ S ([0-9] [a-zA-Z] [\ sa-zA-Z] [0-9] *) ([A-Za-z0-9! @ # $ % _ '' "" \^\ & * -. \] {1,20}) $/

0

ne dite di questo .. che permette di caratteri speciali e così come alfa numerico

"[-~]*$" 
0

? Poiché non so quanti caratteri speciali esistono, è difficile controllare che la stringa contenga caratteri speciali dalla lista bianca. Potrebbe essere più efficiente controllare che la stringa contenga solo alfabeto o numeri.

per esempio Kotlin

fun String.hasOnlyAlphabetOrNumber(): Boolean { 
    val p = Pattern.compile("[^a-zA-Z0-9]") 
    if (p.matcher(this).matches()) return false 
    return true 
} 

per swift4

func hasOnlyAlphabetOrNumber() -> Bool { 
    if self.isEmpty { return false } 
    do { 
     let pattern = "[^a-zA-Z0-9]" 
     let regex = try NSRegularExpression(pattern: pattern, options: .caseInsensitive) 
     return regex.matches(in: self, options: [], range: NSRange(location: 0, length: self.count)).count == 0 
    } catch { 
     return false 
    } 
} 
Problemi correlati