Если вы хотите проверить, что вся строка состоит только из тех символов, которые вам нужны, привязка ваше регулярное выражение выглядит следующим образом:
^[a-zA-Z0-9]+$
В противном случае будет проходить каждая строка, содержащая строку разрешенных символов где-то . Якоря по сути говорят механизму регулярных выражений начинать поиск этих символов в начале строки и прекращать поиск в конце строки.
Для пояснения: если вы просто используете [a-zA-Z0-9]+
в качестве регулярного выражения, то механизм регулярного выражения по праву отклонит строку -__--
, поскольку регулярное выражение не соответствует этому. В определенном вами классе символов нет ни одного символа.
Однако со строкой a-b
все по-другому. Механизм регулярных выражений будет соответствовать первому a
здесь, так как он соответствует введенному вами выражению (хотя бы одному из заданных символов) и не будет заботиться о -
или b
. Он выполнил свою работу и успешно сопоставил подстроку в соответствии с вашим регулярным выражением.
Аналогично _-abcdef-
- регулярное выражение будет точно соответствовать подстроке abcdef
, потому что вы не указали, что она совпадает только в начале или конце строки; и игнорировать другие символы.
Таким образом, при использовании ^[a-zA-Z0-9]+$
в качестве регулярного выражения вы точно указываете механизму регулярных выражений, что ищете одну или несколько букв или цифр, начиная с самого начала строки вплоть до конца строки. Нет места для других персонажей, чтобы втиснуться или спрятаться, так что это будет делать то, что вы, очевидно, хотите. Но без привязок совпадение может быть в любом месте в строке поиска. В целях проверки вы всегда хотите использовать эти якоря.