На самом деле, данный ответ не совсем правильный.Проблема возникает потому, что числа 0-9 также являются десятичными значениями.ЧАСТЬ того, что вам нужно сделать, это проверить на 00-99 вместо 0-9, чтобы убедиться, что нижние значения не являются десятичными числами.Вот так:
^([0-9A-Fa-f]{2})+$
Чтобы сказать, что они должны быть в парах!В противном случае - строка это что-то еще!: -)
Пример:
(Pick one)
var a = "1e5";
var a = "10";
var a = "314159265";
Если бы я использовал принятый ответ в регулярном выражении, он вернул бы ИСТИНА.
var re1 = new RegExp( /^[0-9A-Fa-f]+$/ );
var re2 = new RegExp( /^([0-9A-Fa-f]{2})+$/ );
if( re1.test(a) ){ alert("#1 = This is a hex value!"); }
if( re2.test(a) ){ alert("#2 = This IS a hex string!"); }
else { alert("#2 = This is NOT a hex string!"); }
Обратите внимание, что "10"возвращает TRUE в обоих случаях.Если входящая строка имеет только 0-9, вы НЕ МОЖЕТЕ сказать, легко ли это шестнадцатеричное значение или десятичное значение, ЕСЛИ МЕНЬШЕ отсутствует пропущенный ноль перед строками вне длины (шестнадцатеричные значения всегда идут парами - т.е. - младший байт /старший байт).Но такие значения, как «34», являются абсолютно правильными десятичными ИЛИ шестнадцатеричными числами.Они просто означают две разные вещи.
Также обратите внимание, что «3.14159265» не является шестнадцатеричным значением, независимо от того, какой тест вы проводите из-за периода.Но с добавлением "{2}" вы по крайней мере убедитесь, что это действительно шестнадцатеричная строка, а не то, что выглядит как шестнадцатеричная строка.