Как вы убиваете фьючерсы, когда они начались?

Поскольку ваш класс символов [A-z] соответствует этому символу.

[A-z] соответствует [, \, ], ^, _, ` и английские буквы.

На самом деле это распространенная ошибка. Вы должны использовать [a-zA-Z] вместо того, чтобы разрешать только английские буквы.

Вот визуализация из Expresso, показывающая, что на самом деле охватывает диапазон [A-z]:

screenshot from Expresso showing the ASCII table, where you can see what the [A-z] range actually covers [/g1]

Итак, это регулярное выражение (с опцией i) не будет записывать вашу строку.

^(?=.*[0-9])(?=.*[a-z])[0-9a-z-]{17}$

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

30
задан Nick Chammas 20 March 2015 в 23:42
поделиться