Я хочу проверить, входит ли мой ввод, начиная с 8 шестнадцатеричных символов, за которыми следует знак подчеркивания, за которым следует любое количество чартеров с любым значением.
В настоящее время я использую следующее регулярное выражение:
preg_match('/^[0-9A-Fa-f]{8}_*/', $value);
Но это выражение не удовлетворяет моих потребностей, потому что оно ведет себя следующим образом
Результат:
1A345678 (true) 1A345678_add (true) 1234567890 (true) ABSDBASDB (false)
Ожидаемый результат:
1A345678 (false) 1A345678_add (true) 1234567890 (false) ABSDBASDB (false)
Что не так с моим регулярным выражением?
Вам просто не хватает .
preg_match('/^[0-9A-Fa-f]{8}_.*/', $value);
С _*
вы были сопоставлены для 0 или более символов подчеркивания. *
– квантификатор, который повторяет предыдущий символ или группу 0 или более раз. Поэтому он совпадает с строками без подчеркивания в конце (0 повторений _)
.
является специальным символом регулярного выражения, который соответствует любому символу (по умолчанию, кроме строк новой строки)
Попробуйте удалить *:
preg_match('/^[0-9A-Fa-f]{8}_/', $value);
замените * на. * после подчеркивания
preg_match('/^[0-9A-Fa-f]{8}_.*/', $value);