Walidacja formularzy - dwu członowe nazwy własne.

0

Witam,
wykonuje właśnie w ramach edukacyjnego projektu aplikację. Jestem na etapie walidacji danych, jest całkiem nieźle. Niestety do pełnej elegancji brakuje mi kilku rzeczy.

  1. Chciałbym aby nazwy miast i adresy były wpisywane z dużej litery
  2. Konieczne są polskie znaki
  3. Możliwość wpisywania nazw trzy, dwu-członowych: Grot-Rowecki, Rondo Lotników Lwowskich 23/34
  4. Nazwy członów z dużych liter i opcjonalne dla użytkownika przy wpisywaniu

Oto efekt mojej pracy:
Nazwisko: **"^[A-ZŁŻŹĄĘŚĆÓ][a-złżźąęćśóń]{2,60}$" **
Ulica: "^[A-ZŁŻŹĄĘŚĆÓ][a-złżźąęćśóń0-9 /]{3,60}$"

-Z dużej literki wchodzi nazwisko ale drugi człon już musi być z małej
-W przypadku adresu można wpisać np "Ulica/// 333" i też pójdzie.

Link do kodu: https://github.com/pangeon/JMTrain/blob/master/src/main/webapp/WEB-INF/profile.jsp

2

To moim zdaniem nie tak. Po pierwsze nie z dużej a z wielkiej litery. Wszystko co uzytkownik wpisze powinienes zmieniac na male litery potem albo uzyć funckji do ustawineia pierwszej litery wielkiej albo camel case ze kazdy wyraz z wielkiej ma litere. Czemu nazwisko ma miec czlon z wielkiej i malej. Moze być nazwisko Majewska-Lisek albo Marek Kowalski Nowak . im wiecej nawtykasz syfu w te walidacje tym szybciej zniecheciz uzytkownikow do rejeestracji. To po twojej stronie stoi jak dane maja byc modyfikowane a nie zeby uzytkownik mial za ciebie robic.

a to "Nazwa miasta pisana dużą literą (min 4 znaki). Możliwy odstęp" co to ma być ? Jak ktoś wpisze miasto Hel to już nie będzie mógł się zapsiać na szkolenie bo jego miasto nie ma 4 liter ? jj :) jakis MISZCZ to wymyslil :)

2

No i w czym problem?

Nazwisko:

([A-ZŁŻŹĄĘŚĆÓ][a-złżźąęćśóń]{2,30}-[A-ZŁŻŹĄĘŚĆÓ][a-złżźąęćśóń]{2,30}|[A-ZŁŻŹĄĘŚĆÓ][a-złżźąęćśóń]{2,60})
0

Taka formułka:
[A-ZŁŻŹĄĘŚĆÓ][a-złżźąęćśóń]{2,30}$-[A-ZŁŻŹĄĘŚĆÓ][a-złżźąęćśóń]{2,30}$|[A-ZŁŻŹĄĘŚĆÓ][a-złżźąęćśóń]{2,60}$
działa lepiej :) Dzięki za inspiracje. Rozumiem użycie operatora lub.

Niestety rezultat nadal jest niepełny:
można wpisać: np. Ceresz \... Kopeć ... Warecka + Michoń

O Helu nie pomyślałem :P

1

jquery-1.11.2 - nie ma jakiegoś nowszego?
zamiast bootstrapValidator może lepiej https://validatejs.org który ma prawie wszystkie walidacje z adresami też

1
Pangeon napisał(a):

Taka formułka:
[A-ZŁŻŹĄĘŚĆÓ][a-złżźąęćśóń]{2,30}$-[A-ZŁŻŹĄĘŚĆÓ][a-złżźąęćśóń]{2,30}$|[A-ZŁŻŹĄĘŚĆÓ][a-złżźąęćśóń]{2,60}$
działa lepiej :) Dzięki za inspiracje. Rozumiem użycie operatora lub.

Bój się boga, takie regexpy to się pisało 20 lat temu. Jak chcesz dopuścić znaki akcentowane to zależnie od języka skorzystaj z ::letter:: lub \p{L}.

2

Poza tym , jeśli już mamy szukać dziury w całym, to chciałem zauważyć, że mogą się trafić osoby z "dziwnymi", ale niepolskimi znaczkami w nazwiskach - czy to obcokrajowcy, czy ktoś z importowanym przodkiem. Jak się wpisze np. niemieckie nazwisko z jakimś umlautem (ä, ö czy ü) to taki regex też nie przepuści :P

2
cerrato napisał(a):

Poza tym , eśli już mamy szukać dziury w całym, to chciałem zauważyć, że mogą się trafić osoby z "dziwnymi", ale niepolskimi znaczkami w nazwiskach - czy to obcokrajowcy, czy ktoś z importowanym przodkiem. Jak się wpisze np. niemieckie nazwisko z jakimś umlautem (ä, ö czy ü) to taki regex też nie przepuści :P

Agree, nie ma nic gorszego niż formularz który myśli że jest mądrzejszy niż Ty. Zwłaszcza że jak dopuszczasz polskie znaki tzn ze masz Unicode w bazie i wszystko Ci jedno czy to "ą" czy niemieckie "a" z akcentem.

1

Tak w ogóle najlepiej użyć słownika, dopiero potem regexa a na koniec wywalić komunikat, że niepoprawna nazwa. Przecież na upartego da się znaleźć słownik nazwisk, ulic itp.

2
Pangeon napisał(a):

Taka formułka:
[A-ZŁŻŹĄĘŚĆÓ][a-złżźąęćśóń]{2,30}$-[A-ZŁŻŹĄĘŚĆÓ][a-złżźąęćśóń]{2,30}$|[A-ZŁŻŹĄĘŚĆÓ][a-złżźąęćśóń]{2,60}$
działa lepiej :) Dzięki za inspiracje. Rozumiem użycie operatora lub.

Niestety rezultat nadal jest niepełny:
można wpisać: np. Ceresz \... Kopeć ... Warecka + Michoń

O Helu nie pomyślałem :P

Podobno system IBMu sie kiedyś wywalił, bo przyjechała Chinka o nazwisku Y

2

Podobno system IBMu sie kiedyś wywalił, bo przyjechała Chinka o nazwisku Y

E tam, Y to jeszcze nic. Naprawdę prze**ne ma Jennifer Null :D

https://thenextweb.com/insider/2016/03/27/last-name-null-is-tough-for-computers/

0

Znam się na front-endzie jak znam :P cóż.
Poproszę o jakiś fajną zajawkę, nazwy, linki
wolę korzystać z dobrych praktyk ale w Internecie jest wszystko.

Co to znaczy że używam starych regexp'ów ?

2

Nasz forumowy kolega @TomRiddle stoi za projektem biblioteki do regexów - https://t-regx.com/
Możesz się jej przyjrzeć :P

EDIT
Zapomniałem, że ona jest do PHP a nie JS... ale i tak możesz rzucić okiem ;)

3
Pangeon napisał(a):

Co to znaczy że używam starych regexp'ów ?

Miałem na myśli to że w wielu silnikach wyrażeń regularnych istnieją predefiniowane grupy znaków, niektóre proste:

  • \w = [a-zA-Z0-9]
  • \d = [0-9]

...inne bardziej skomplikowane, takie które zawierają znaki o których byś nawet nie pomyślał - właśnie jak np \p{L} lub \p{M}.

Tu jest lista na początek: https://regular-expressions.mobi/unicode.html?wlr=1

1 użytkowników online, w tym zalogowanych: 0, gości: 1