У меня проблема с разрешением заданных символов в preg_match. Я попытался сделать следующий шаблон: /^[A-Za-z0-9 !@#$%&()-_\[\]:;\"'|,.\?\/]/
Прямо сейчас позволяет все, даже *, которого нет.
Я знаю, что там это правило, что перед регулярным выражением заданные символы мне нужно поставить "\"
перед символом. Поправьте меня если я ошибаюсь.
Может кто-нибудь объяснить мне, как это работает?
Я хочу разрешить эти символы: AZ az 0-9! @# $% &() -_ [] :; "'|,.? (И, конечно, пробелы)
И исключите это: ~ '^ * + = {} <>\
Неэкранированный дефис должен быть в первой или последней позиции в классе символов или его нужно экранировать. В противном случае это считается диапазоном. Поэтому используйте:
/^[A-Za-z0-9 !@#$%&()_\[\]:;\"'|,.\?\/-]/
В вашем регулярном выражении /^[A-Za-z0-9 !@#$%&()-_\[\]:;\"'|,.\?\/]/
Где -
находится посередине и )
(ASCII: 41) и _
(ASCII: 95), что соответствует всем символам этого диапазона.
Также вам необходимо использовать привязки для соответствия целым входам:
/^[A-Za-z0-9 !@#$%&()_\[\]:;\"'|,.\?\/-]+$/
/^[A-Za-z0-9 !@#$%&()_\[\]:;\"'|,.\?\/-]+$/
Эта часть )-_
в классе символов представляет собой диапазон символов.
От )
до _
.
Вы, вероятно, должны избегать тире. )\-_
тогда это просто персонаж.
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 _