2013-01-31 7 views
5

Ich habe die Anforderung, alphanumerische und bestimmte andere Zeichen für ein Feld zuzulassen. Ich bin mit diesem regulären Ausdruck:RegEx für die Eingabe von alphanumerischen und Sonderzeichen

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

Die erlaubten Sonderzeichen sind ! @ # $ & () - ‘ ./+ , “

Aber wenn ich das Muster mit einer Schnur „test_for_extended_alphanumeric“ testen, übergibt die Zeichenfolge den Test. Ich habe keine "_" im Muster erlaubt. Was mache ich falsch?

Antwort

6

Sie müssen den Bindestrich entkommen:

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

Wenn Sie es nicht entgehen, dann bedeutet es eine Reihe von Zeichen, wie a-z.

+0

Danke für die schnelle Antwort. Das hat geholfen. –

0

Bindestriche in Zeichenklassen bezeichnen einen Bereich, es sei denn, sie sind maskiert oder am Anfang oder Ende der Zeichenklasse. Wenn Sie Bindestriche enthalten sein sollen, es ist in der Regel eine gute Idee, sich an der Front zu setzen, so dass Sie nicht einmal kümmern Flucht:

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

By the way, _ fällt in der Tat zwischen ) und der Graviszeichen in ASCII:

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

0

in Ihre Zeichenklasse der )-' wird als ein Bereich in der gleichen Weise wie zB interpretiert a-z, bezieht es sich daher auf jedes Zeichen mit einem dezimalen ASCII-Code von 41 ) bis 96 '.

Seit _ Code hat 95, ist es innerhalb des Bereichs und daher erlaubt, wie < sind, =, > usw.

dies möglich zu vermeiden, entweder entkommen die -, dh \-, oder setzen Sie den - an entweder der Start oder das Ende der Zeichenklasse:

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

Es gibt keine Notwendigkeit, die " zu entkommen, und beachten Sie, dass, weil Sie mit dem * quantifier, ein e mpty string wird auch den Test bestehen.

0

Verwenden Sie diese Regex, das wird funktionieren.

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

0

wie dies über .. die

numerischen Sonderzeichen und sowie alpha ermöglicht
"[-~]*$" 
0

? Da ich nicht weiß, wie viele Sonderzeichen existieren, ist es schwierig zu überprüfen, ob die Zeichenkette Sonderzeichen enthält. Es kann effizienter sein, zu überprüfen, ob die Zeichenfolge nur Buchstaben oder Zahlen enthält.

für Kotlin Beispiel

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

für 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 
    } 
} 
Verwandte Themen