Поскольку ваш класс символов [A-z]
соответствует этому символу.
[A-z]
соответствует [
, \
, ]
, ^
, _
, `
и английские буквы.
На самом деле это распространенная ошибка. Вы должны использовать [a-zA-Z]
вместо того, чтобы разрешать только английские буквы.
Вот визуализация из Expresso, показывающая, что на самом деле охватывает диапазон [A-z]
:
[/g1]
Итак, это регулярное выражение (с опцией i
) не будет записывать вашу строку.
^(?=.*[0-9])(?=.*[a-z])[0-9a-z-]{17}$
На мой взгляд, это всегда безопаснее использовать опцию Ignorecase
, чтобы избежать такой проблемы и сократить регулярное выражение.