Справка по регулярному выражению в PHP (8 шестнадцатеричных символов, за которыми следует символ подчеркивания)

Я хочу проверить, входит ли мой ввод, начиная с 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);