2008-11-13 2 views
14

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

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

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

ответ

50

Я считаю

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

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

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

+0

Я согласен, что заслуживает внимания – 2008-11-13 17:56:58

9

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

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

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

+0

С точки зрения производительности, это * много * лучше. Гораздо меньше отступают от несовпадения. +1 – Tomalak 2008-11-13 17:58:34

+0

Скобки нужны здесь. Если вы их опустите, то? делает {2} ленивым, что не имеет никакого эффекта здесь. – 2008-11-14 10:05:57

0

Я бы, вероятно, пойти с

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

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

Смежные вопросы