Простое регулярное выражение для сопоставления одних символов и исключения других - PullRequest
1 голос
/ 01 апреля 2019

Мне нужно регулярное выражение для preg_match для приема всех буквенно-цифровых символов, кроме l, L, v, V, 0, 2.

Я пробовал

^[a-zA-Z0-9][^lLvV02]*$

Работает хорошо, за исключением lLvV02, но принимает и другие символы, такие как SPACE, ù, @, # и т. Д. *

Как мне это изменить?

Ответы [ 3 ]

0 голосов
/ 01 апреля 2019

Я знаю, что вы запросили Regex, но вы можете сначала проверить буквенно-цифровые символы и только в том случае, если они прошли проверку на отсутствие других:

if(ctype_alnum($string) && !preg_match('/[lLvV02]/', $string)) {
    //pass
} else {
    //fail
}

Или, возможно, заменить preg_match('/^[^lLvV02]+$/', $string).

0 голосов
/ 01 апреля 2019

Самый простой, вероятно, будет: ^[a-km-uw-zA-KM-UW-Z13-9]*$. Я не говорю, что это красиво, но делает то, что должно.

0 голосов
/ 01 апреля 2019

Вы можете использовать

^(?:(?![lLvV02])[a-zA-Z0-9])*$

Подробности

  • ^ - начало строки
  • (?: - начало строкигруппа без захвата
    • (?![lLvV02])[a-zA-Z0-9] - символ alnum, который не является одним из символов в классе персонажа, находящемся в негативном поле зрения
  • )* -конец группы без захвата, 0 или более повторений
  • $ - конец строки

См. график регулярных выражений :

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...