• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pattern w html5, problem z przystosowaniem do czatu.

Mały hosting, OGROMNE możliwości
0 głosów
338 wizyt
pytanie zadane 18 maja 2017 w HTML i CSS przez Adrian Karwowski Użytkownik (500 p.)

Witam,

mam problem z ustawieniem atrybutu "pattern", zależy mi na tym żeby ciąg znaków zawierał przynajmniej jedną literę, 2 -240 znaków a reszta dowolna. 

pattern="^[a-zA-Z0-9].{2,240}"

Jak to przeprawić aby ten warunek wymagał przynajmniej jeden ze znaków w dowolnym miejscu?

Z góry dziękuję za pomoc :)

1
komentarz 18 maja 2017 przez jpacanowski VIP (101,940 p.)
Niektórzy programiści gdy natrafią na problem myślą: "Już wiem, użyję wyrażeń regularnych"... i wtedy mają już dwa problemy...
komentarz 18 maja 2017 przez Tomek Sochacki Ekspert (227,510 p.)
Fakt, często słyszałem takie stwierdzenie ale wg mnie niepotrzebnie tylko odstraszamy w ten sposób ludzi do nauki regexp. Tym bardziej, że akurat w tym wypadku wzorzec regexp jest bardzo prosty i wcale nie jest to długie wyrażenie.
komentarz 18 maja 2017 przez Tomek Sochacki Ekspert (227,510 p.)
Tak na marginesie, Twój regex: "^[a-zA-Z0-9].{2,240}"

Zakładasz w nim, że na początku ciągu musi wystąpić litera lub cyfra (natomiast w opisie nie wspominasz nic o cyfrze), po czym musi wystąpić inny dowolny znak co najmniej 2 razy. Łącznie więc wymagasz minimum 3 znaków, a nie dwóch.

Ja w moim regexp użyłem tzw. dopasowania wyprzedzającego przez co precyzyjnie wskazuję że znaków ma być od 2 do 240 i określam, że na dowolnym miejscu musi być litera.

1 odpowiedź

0 głosów
odpowiedź 18 maja 2017 przez Tomek Sochacki Ekspert (227,510 p.)
edycja 18 maja 2017 przez Tomek Sochacki

Założenie: łącznie od 2 do 240 znaków (dowolnych), z czego obowiązkowo co najmniej jeden raz musi wystąpić litera (wielka lub mała):

let reg = /^(?=.*[a-z]+).{2,240}/i;

reg.test('abc123'); //true
reg.test('ABC123'); //true
reg.test('123abc'); //true
reg.test('12345');  //false -> brak min. jednej litery

W powyższym regexp zakładamy jednak, że ową "minimum jedną literą" ma być litera alfabetu łacińskiego, czyli nie uwzględniającego polskich znaków, dlatego:

reg.test('123Ć123'); //false -> jedyna litera to "Ć"

Pytanie czy o coś takiego chodziło, czy jakieś inne założenia potrzebujesz?

Ponad to zastanów się, czy na pewno chcesz dopuszczać wszystkie znaki? Symbol kropki "." dopasuje pozytywnie dowolny znak Unicode co wg mnie nie jest dobrym pomysłem, ale to już zależy od poziomu zaufania do danych i celu stosowania regexp.

Podobne pytania

0 głosów
1 odpowiedź 474 wizyt
pytanie zadane 7 sierpnia 2017 w HTML i CSS przez ayo1001 Obywatel (1,890 p.)
0 głosów
2 odpowiedzi 757 wizyt
0 głosów
1 odpowiedź 804 wizyt

93,719 zapytań

142,632 odpowiedzi

323,264 komentarzy

63,266 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...