Próbuję użyć następującego kodu z jQuery, aby potwierdzić ciągłe struny wartości Hex, ale otrzymuję nieoczekiwane wyniki:

var a = new RegExp("0x[a-fA-F0-9]+")
var result = a.test('0x1n')

W tym przypadku wynik faktycznie zwraca prawdziwy. Czego tutaj tęsknię?

0
notlkk 19 październik 2011, 02:30

3 odpowiedzi

Najlepsza odpowiedź

Potrzebujesz kotwic, aby pasowały do początku i końca ciągu. Spowoduje to, że wyrażenie regularne spróbuje dopasować się do ciągów cały ciąg, a nie tylko części sznurka:

var a = new RegExp("^0x[a-fA-F0-9]+$")

W przeciwnym razie wyrażenie regularne pasuje do części 0x1 i zwraca true.

W innej notatce, poniższe byłyby trochę lepsze:

var re = /^0x[a-f0-9]+$/i;

Flaga i sprawia, że jest niewrażliwy, więc nie musisz określić a-f i A-F.

2
Vivin Paliath 18 październik 2011, 22:33

Twój REGEX pasuje do tego sznurka, ponieważ nie masz na nim żadnych kotwic. Jeśli zmienisz regex do ^0x[a-fA-F0-9]+$, a następnie ciąg 0x1n nie pasuje.

Edytuj: Aby uzyskać dalsze wyjaśnienie, dlaczego pasuje do ciągów, wyrażenie regularne faktycznie próbuje dopasować ciąg zawierający 0x, a następnie jeden lub więcej znaków w klasie znaków {X1}}. String 0x1n zawiera 0x, a następnie 1, który znajduje się w klasie znaków [a-fA-F0-9].

Dodawanie kotew oznacza, że twój ciąg musi zaczynać się od 0x, a następnie zakończyć za pomocą jednego lub więcej znaków w klasie znaków [a-fA-F0-9]. 0x1n nie pasowałby, ponieważ kończy się w n, co nie jest w tej klasie znaków.

1
CanSpice 18 październik 2011, 22:32

Zwraca prawdziwe, ponieważ nie wymagasz całego ciągu, aby dopasować ten wzór. Spróbuj tego:

var a = new RegExp("^0x[a-fA-F0-9]+$")
1
Justin Morgan 18 październik 2011, 22:32