preg_match и regex - разрешать или исключать символы

1

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

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

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

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

И исключите это: ~ '^ * + = {} <>\

Теги:
preg-match

2 ответа

2
Лучший ответ

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

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

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

Также вам необходимо использовать привязки для соответствия целым входам:

/^[A-Za-z0-9 !@#$%&()_\[\]:;\"'|,.\?\/-]+$/
  • 0
    К сожалению, это не работает. Это все еще позволяет символы, такие как {}.
  • 0
    Проверьте обновленный ответ, используйте якоря: /^[A-Za-z0-9 !@#$%&()_\[\]:;\"'|,.\?\/-]+$/
Показать ещё 3 комментария
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  _    

Ещё вопросы

Сообщество Overcoder
Наверх
Меню