Регулярные выражения Perl для соответствия Хешу MD5?

Недавно программируя в PHP, я думал, что у меня было рабочее регулярное выражение Perl, но когда я проверил его по тому, что я хотел, это не работало.

То, что является правильным выражением, чтобы проверить, является ли что-то MD5, имеет (32 цифры, шестнадцатеричные из a-z и 0-9).

В настоящее время я имею /^[a-z0-9]{32}$/i

9
задан Alix Axel 15 July 2010 в 17:56
поделиться

5 ответов

MD5:

/^[0-9a-f]{32}$/i

SHA-1:

/^[0-9a-f]{40}$/i

MD5 или SHA-1:

/^[0-9a-f]{32}(?:[0-9a-f]{8})?$/i

Кроме того, большинство хэшей всегда представляются в строчном шестнадцатеричном виде, поэтому вам стоит отказаться от модификатора и.


Кстати, шестнадцатеричное число означает основание 16:

0  1  2  3  4  5  6  7  8  9  A   B   C   D   E   F  = base 16
0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15 = base 10

Так что, как видите, оно идет только от 0 до F, точно так же, как десятичное (или основание 10) идет только от 0 до 9.

34
ответ дан 4 December 2019 в 05:56
поделиться
/^[a-f0-9]{32}$/i

Должен работать немного лучше, поскольку хеши MD5 обычно выражаются в виде шестнадцатеричных чисел.

13
ответ дан 4 December 2019 в 05:56
поделиться

Что ж, важно учитывать тот факт, что $ может соответствовать \ n . Следовательно:

E:\> perl -e "$x = qq{1\n}; print qq{OK\n} if $x =~ /^1$/"
OK

Ой!

Таким образом, правильный шаблон:

/^[[:xdigit:]]{32}\z/
5
ответ дан 4 December 2019 в 05:56
поделиться

@OP, вы можете использовать / [a-f0-9] {32,40} / , это может проверить длину больше 32 , например, созданные из sha1.

-1
ответ дан 4 December 2019 в 05:56
поделиться

Существует также класс символов POSIX xdigit (см. perlreref ):

/^[[:xdigit:]]{32}$/
9
ответ дан 4 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: