2015-07-08 4 views
1

У меня проблема с разрешением заданных символов в preg_match. Я попытался сделать следующий шаблон: /^[A-Za-z0-9 [email protected]#$%&()-_\[\]:;\"'|,.\?\/]/ Прямо сейчас он позволяет все, даже *, которого нет.preg_match и regex - разрешить или исключить символы

Я знаю, что существует такое правило, что перед указанными символами регулярных выражений я должен поставить "\" перед символом. Поправьте меня если я ошибаюсь.

Может кто-нибудь объяснить мне, как это работает?

Я хочу, чтобы это символы: AZ AZ 0-9 @ # $% &() -_ [] :; " '|/(и, конечно, пространств)

И исключающие!.? это: ~ `^ * + = {} <> \

+1

возможно дубликат [Что буквальный символы должны быть экранированы в регулярном выражении?] (Http://stackoverflow.com/q/5484084) – mario

+0

@mario спасибо, это объясняет это очень хорошо. – MegaKaskaskas

ответ

2

неэкранированный дефис должен быть на первой или последней позиции в классе символов или его нужно экранировать в противном случае это считается диапазон Так использовать..:

/^[A-Za-z0-9 [email protected]#$%&()_\[\]:;\"'|,.\?\/-]/ 

В вашем регулярном выражении /^[A-Za-z0-9 [email protected]#$%&()-_\[\]:;\"'|,.\?\/]/, где - находится в середине и ) (ASCII: 41) и _ (ASCII: 95), поэтому соответствует всем символам этого диапазона.

Кроме того, необходимо использовать якоря, чтобы соответствовать весь вход:

/^[A-Za-z0-9 [email protected]#$%&()_\[\]:;\"'|,.\?\/-]+$/ 
+0

К сожалению, это не сработает. Это позволяет использовать символы {}. – MegaKaskaskas

+0

Проверить обновленный ответ, использовать якоря: '/^[A-Za-z0-9! @ # $% &() _ \ [\]:; \" '|,. \? \/-] + $/' – anubhava

+1

Теперь он отлично работает! Большое спасибо @anubhava! – MegaKaskaskas

1

Эта часть )-_ в классе символов является диапазон символов.
От ) до _.

Вы, вероятно, должны избегать тире .. )\-_, тогда его просто символ.

41 29 )  73 49 I  
    42 2A *  74 4A J  
    43 2B +  75 4B K  
    44 2C ,  76 4C L  
    45 2D -  77 4D M  
    46 2E .  78 4E N  
    47 2F/  79 4F O  
    48 30 0  80 50 P  
    49 31 1  81 51 Q  
    50 32 2  82 52 R  
    51 33 3  83 53 S  
    52 34 4  84 54 T  
    53 35 5  85 55 U  
    54 36 6  86 56 V  
    55 37 7  87 57 W  
    56 38 8  88 58 X  
    57 39 9  89 59 Y  
    58 3A :  90 5A Z  
    59 3B ;  91 5B [  
    60 3C <  92 5C \  
    61 3D =  93 5D ]  
    62 3E >  94 5E^  
    63 3F ?  95 5F _  
Смежные вопросы