Регулярное выражение для проверки шестнадцатеричной строки

Я использую это простое регулярное выражение для проверки шестнадцатеричной строки:

^[A-Fa-f0-9]{16}$

Как вы можете видеть, я использую квантификатор для проверки того, что строка имеет длину 16 символов. Мне было интересно, могу ли я использовать другой квантификатор в том же регулярном выражении, чтобы проверить длину строки как 16 или 18 (не 17).

Ответ 1

Я верю

^([A-Fa-f0-9]{2}){8,9}$

будет работать.

Это хорошо, потому что оно обобщает на любую строку четной длины.

Ответ 2

Это всего лишь требование 16 символов с дополнительным 2 символами впоследствии:

^[A-Fa-f0-9]{16}([A-Fa-f0-9]{2})?$

Скобки могут не потребоваться - я недостаточно гуру-регулярного выражения, чтобы знать, что я не знаю, боюсь. Если кто-то хочет отредактировать его, не стесняйтесь...

Ответ 3

^(?:[A-Fa-f0-9]{16}|[A-Fa-f0-9]{18})$

Ответ 4

Я бы, вероятно, пошел с

/^[a-f0-9]{16}([a-f0-9]{2})?$/i

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