Przejdź do głównej zawartości

Bug #086

🪲 Znajdź buga

console.log(/^[A-z]+$/.test("ABCD"))
console.log(/^[A-z]+$/.test("wxyz"))
console.log(/^[A-z]+$/.test("QwEr"))
console.log(/^[A-z]+$/.test("\\[]"))
console.log(/^[A-z]+$/.test("^_``"))
console.log(/^[A-z]+$/.test("1234"))
console.log(/^[A-z]+$/.test("a1b2"))
console.log(/^[A-z]+$/.test("\nnn"))
console.log(/^[A-z]+$/.test("a b "))

Chcemy przetestować różne ciągi znaków za pomocą wyrażenia regularnego ^[A-z]+$.

^ oznacza początek ciągu znaków.

[A-z] oznacza dowolny znak z zakresu od A do z.

+ oznacza jeden lub więcej znaków.

$ oznacza koniec ciągu znaków.

Metoda test() wykonana na wyrażeniu regularnym zwraca wartość logiczną true/false w zależności od tego czy przekazany w argumencie ciąg znaków jest zgodny z wyrażeniem regularnym.

Jakie wartości zostaną zalogowane do konsoli dla przykładowych testów?

🧪 Rozwiązanie

console.log(/^[A-z]+$/.test("ABCD")) // true
console.log(/^[A-z]+$/.test("wxyz")) // true
console.log(/^[A-z]+$/.test("QwEr")) // true
console.log(/^[A-z]+$/.test("\\[]")) // true
console.log(/^[A-z]+$/.test("^_``")) // true
console.log(/^[A-z]+$/.test("1234")) // false
console.log(/^[A-z]+$/.test("a1b2")) // false
console.log(/^[A-z]+$/.test("\nnn")) // false
console.log(/^[A-z]+$/.test("a b ")) // false

Wartości false zostają zwracane dla ciągów znaków, w których występują liczby, ponieważ zakres od A do z nie zawiera liczb.

Białe znaki jak spacje czy przejścia do nowej linii (\n) również nie wchodzą w skład zakresu z wyrażenia regularnego, więc ich obecność w ciągu znaków również poskutkuje zwróceniem wartości false.

Ciągi znaków składające się wyłącznie ze znaków z zakresu od A do z zwracają true.

Duża niespodzianka czeka na nas gdy w ciągu znaków pojawią się znaki\ [ \ ] ^ _ `

Okazuje się, że są one również elementem zakresu [A-z] w wyrażeniach regularnych.

Tablica kodowania znaków Unicode plasuje te znaki dokładnie pomiędzy zakresem [A-Z] a [a-z].

Tworząc więc wyrażenie regularne dla zakresu znaków [A-z] niejawnie szukamy też znaków [ \ ] ^ _ `.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js