Do celów walidacji strony internetowej potrzebuję weryfikacji imienia i nazwiska.
Imię powinno zawierać tylko litery, może składać się z kilku słów ze spacjami i mieć co najmniej trzy znaki, ale maksymalnie 30 znaków na górze. Nie należy sprawdzać poprawności pustego ciągu (np. Jason , jason , jason smith , jason smith , JASON , Jason smith , jason Smith i jason SMITH ).
W przypadku nazwiska powinno to być jedno słowo, tylko litery, składające się z co najmniej trzech znaków, ale nie więcej niż 30 znaków. Puste ciągi nie powinny być sprawdzane (np. Lazslo , Lazslo i LAZSLO ).
regex
validation
Hellnar
źródło
źródło
Odpowiedzi:
Nie zapomnij o nazwach takich jak:
To powinno wystarczyć w przypadku większości rzeczy:
/^[a-z ,.'-]+$/i
LUB Obsługuj międzynarodowe nazwy za pomocą super słodkiego Unicode:
/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.'-]+$/u
źródło
.
(punkt dziesiętny / dot / kropka), ponieważ jest to wieloznaczny = regexp)őŐűŰ
Brakuje na przykład znaków węgierskich , polskichłŁ
, nie wspominając o wielu litewskich i łotewskich. Zamiast tego spróbuj znaleźć bibliotekę, która przekształci egzotyczne znaki w odpowiednią wersję bez akcentu, a następnie napisz/^[a-z ,.'-]+$/i
wyrażenie regularne.陳大文
nie jest prawidłowe imię?/^[\p{L}'][ \p{L}'-]*[\p{L}]$/u
, jednak dość wybaczającego.Robisz fałszywe założenia dotyczące formatu imienia i nazwiska. Prawdopodobnie lepiej w ogóle nie sprawdzać poprawności nazwy, poza sprawdzeniem, czy jest pusta.
źródło
Po przejrzeniu wszystkich tych odpowiedzi znalazłem sposób na zbudowanie małego wyrażenia regularnego, które obsługuje większość języków i pozwala tylko na znaki słowne. Obsługuje nawet niektóre znaki specjalne, takie jak łączniki, spacje i apostrofy. Testowałem w Pythonie i obsługuje poniższe znaki:
Obsługiwane znaki:
źródło
^[\w'\-,.]*[^_!¡?÷?¿\/\\+=@#$%ˆ&*(){}|~<>;:[\]]*$
^[^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{2,}$
Utworzyłem niestandardowe wyrażenie regularne do obsługi nazw:
Wypróbowałem tego typu nazwy i stwierdziłem, że działają idealnie
Moje wyrażenie regularne wygląda następująco:
Model MVC4:
Zwróć uwagę na podwójne
\\
znaki ucieczkiPomyślałem, że dla tych z Was, którzy są nowicjuszami w RegEx, dołączę wyjaśnienie.
źródło
Szukałem, szukałem, grałem i bawiłem się nim i chociaż nie jest on doskonały, może pomóc innym w podjęciu próby sprawdzenia poprawności imion i nazwisk, które zostały podane jako jedna zmienna.
W moim przypadku ta zmienna to $ name.
Użyłem następującego kodu dla mojego PHP:
Sam uczę się RegEx, ale mam wyjaśnienie kodu dostarczone przez znajomego RegEx.
Oto ona:
Potwierdź pozycję na granicy słowa «\ b»
Dopasuj poniższe wyrażenie regularne i przechwyć jego dopasowanie do odniesienia wstecznego numer 1
«([AZ] {1} [az] {1,30} [-] {0,1} | [AZ] {1} [- \ '] { 1} [AZ] {0,1} [az] {1,30} [-] {0,1} | [az] {1,2} [- \ '] {1} [AZ] {1} [ az] {1,30}) {2,5} »
Od 2 do 5 razy, tyle razy, ile to możliwe, dając w razie potrzeby (chciwy) «{2,5}»
* POTRZEBUJĘ TUTAJ POMOCY ZROZUMIENIEM RAMIFIKACJI NINIEJSZEJ NOTATKI *
Uwaga: powtórzyłem samą grupę przechwytywania. Grupa przechwyci tylko ostatnią iterację. Umieść grupę przechwytywania wokół powtarzanej grupy, aby uchwycić wszystkie iteracje. «{2,5}»
Dopasuj jedno z poniższych wyrażeń regularnych (próba skorzystania z następnej alternatywy tylko wtedy, gdy to się nie powiedzie) «[AZ] {1} [az] {1,30} [-] {0,1}»
Dopasuj pojedynczy znak z zakresu od „A” do „Z” «[AZ] {1}»
Dokładnie 1 raz «{1}»
Dopasuj pojedynczy znak z zakresu od „a” do „z” «[az] {1,30}»
Od jednego do 30 razy, tyle razy, ile to możliwe, oddając w razie potrzeby (chciwy) «{1,30}»
Dopasuj pojedynczy znak obecny na liście „-” «[-] {0,1}»
Od zera do jednego razy, tyle razy, ile to możliwe, dając w razie potrzeby (chciwy) «{0,1}»
Lub dopasuj wyrażenie regularne numer 2 poniżej (próba wykonania następnej alternatywy tylko wtedy, gdy ta się nie powiedzie) «[AZ] {1} [- \ '] {1} [AZ] {0,1} [az] {1,30} [ -] {0,1} »
Dopasuj pojedynczy znak z zakresu od „A” do „Z” «[AZ] {1}»
Dokładnie 1 raz «{1}»
Dopasuj pojedynczy znak z poniższej listy «[- \ '] {1}»
Dokładnie 1 raz «{1}»
Jeden ze znaków „-” «-» A 'znak «\'»
Dopasuj pojedynczy znak z zakresu od „A” do „Z” «[AZ] {0,1}»
Od zera do jednego razy, tyle razy, ile to możliwe, dając w razie potrzeby (chciwy) «{0,1}»
Dopasuj pojedynczy znak z zakresu od „a” do „z” «[az] {1,30}»
Od jednego do 30 razy, tyle razy, ile to możliwe, oddając w razie potrzeby (chciwy) «{1,30}»
Dopasuj pojedynczy znak obecny na liście „-” «[-] {0,1}»
Od zera do jednego razy, tyle razy, ile to możliwe, dając w razie potrzeby (chciwy) «{0,1}»
Lub dopasuj wyrażenie regularne numer 3 poniżej (cała grupa zawiedzie, jeśli ta nie pasuje) «[az] {1,2} [- \ '] {1} [AZ] {1} [az] {1,30} »
Dopasuj pojedynczy znak z zakresu od „a” do „z” «[az] {1,2}»
Od jednego do dwóch razy, tyle razy, ile to możliwe, dając w razie potrzeby (chciwy) «{1,2}»
Dopasuj pojedynczy znak z zakresu od „” do „'” «[- \'] {1}»
Dokładnie 1 raz «{1}»
Dopasuj pojedynczy znak z zakresu od „A” do „Z” «[AZ] {1}»
Dokładnie 1 raz «{1}»
Dopasuj pojedynczy znak z zakresu od „a” do „z” «[az] {1,30}»
Od jednego do 30 razy, tyle razy, ile to możliwe, oddając w razie potrzeby (chciwy) «{1,30}»
Wiem, że ta weryfikacja całkowicie zakłada, że każda osoba wypełniająca formularz ma zachodnie imię i może to wyeliminować ogromną większość ludzi na świecie. Jednak czuję, że jest to krok we właściwym kierunku. Być może to wyrażenie regularne jest zbyt proste, aby guru mogli je w prosty sposób rozwiązać, a może jest inny powód, dla którego nie mogłem znaleźć powyższego kodu w moich wyszukiwaniach. Spędziłem zbyt dużo czasu, próbując to rozgryźć, prawdopodobnie zauważysz, jak mglisty jest mój umysł, jeśli spojrzysz na moje nazwy testów poniżej.
Przetestowałem kod na następujących nazwach, a wyniki są w nawiasach po prawej stronie każdej nazwy.
Jeśli masz podstawowe nazwy, musi być więcej niż jedna do pięciu, aby powyższy kod działał, które są podobne do tych, których użyłem podczas testów, ten kod może być dla Ciebie.
Jeśli masz jakieś ulepszenia, daj mi znać. Jestem dopiero na wczesnym etapie (kilka pierwszych miesięcy zastanawiania się nad RegEx.
Dzięki i powodzenia, Steve
źródło
Imię byłoby
Jeśli chcesz, aby cała część imienia była krótsza niż 30 liter, myślę, że musisz to sprawdzić osobno. Wyrażenie
".{3,30}"
powinno to zrobić.Twoje wymagania dotyczące nazwiska przełożyłyby się na
ale powinieneś to sprawdzić. Istnieje wiele nazwisk zawierających spacje.
źródło
Jak powiedział maček:
Nie zapomnij o nazwach takich jak:
i usuwać przypadki takie jak:
Obejmuje to więcej przypadków:
źródło
Pracuję nad aplikacją, która weryfikuje paszporty międzynarodowe (ICAO). Obsługujemy tylko znaki angielskie. Podczas gdy większość obcych znaków narodowych można przedstawić za pomocą znaku w alfabecie łacińskim, np. È przez e, istnieje kilka znaków narodowych, które wymagają dodatkowej litery, aby je przedstawić, na przykład niemiecki umlaut, który wymaga dodania litery „e” do litery np. ä przez ae.
To jest JavaScript Regex dla imienia i nazwiska, którego używamy:
Maksymalna liczba znaków w paszporcie międzynarodowym to 31 . Używamy maxlength = "31", aby ulepszyć komunikaty o błędach słów zamiast włączać je do wyrażenia regularnego.
Oto fragment naszego kodu w AngularJS 1.6 z obsługą formularzy i błędów:
źródło
Używam:
I sprawdź maksymalną długość, używając innych metod
źródło
To regex działa dla mnie (było używane w Angular 8):
Będzie nieważny, jeśli istnieje: -
Przykład niepoprawne imię (spacja)
Przykładowe prawidłowe imię:
źródło
Dla uproszczenia możesz użyć:
Podoba mi się w tym to, że nazwisko jest zawsze po imieniu, więc jeśli zamierzasz wprowadzić te dopasowane grupy do bazy danych, a nazwisko to John M. Smith, pierwszą grupą będzie John M. , a drugą grupą będzie Smith.
źródło
^ potwierdza pozycję na początku wiersza.
\ p {L} pasuje do dowolnego rodzaju liter z dowolnego języka
{2,} Quantifier - Dopasowuje od 2 do nieograniczonej liczby razy, tyle razy, ile to możliwe, dając w razie potrzeby (chciwy)
$ potwierdza pozycję na końcu wiersza
Powinna więc to być nazwa w dowolnym języku zawierająca co najmniej 2 litery (lub symbole) bez cyfr lub innych znaków.
źródło
Tak więc z klientem tworzymy to szalone wyrażenie regularne:
źródło
Imiona i nazwiska to tak naprawdę tylko 2 rzeczy, których powinieneś szukać:
Oto moje wyrażenie regularne:
var regex = /^[A-Za-z-,]{3,20}?=.*\d)/
1. Długość
Tutaj {3,20} ogranicza długość łańcucha do 3 do 20 znaków.
2. Treść
Informacje zawarte w nawiasach kwadratowych [A-Za-z] dopuszczają duże i małe litery. Dozwolone są również wszystkie kolejne symbole (-.).
źródło
To jest to, czego używam.
To wyrażenie regularne akceptuje tylko nazwy z minimalną liczbą znaków od
A-Z a-z ,space and -
.Przykład nazw:
Limit znaków nazwy to 3. Jeśli chcesz to zmienić, zmień {3,} na {6,}
źródło
Poniższe wyrażenie będzie działać w każdym języku obsługiwanym przez UTF-16 i zapewni, że nazwa zawiera co najmniej dwa składniki (tj. Pierwsze + ostatnie), ale pozwoli także na dowolną liczbę drugich imion.
W chwili pisania tego tekstu wydaje się, że żadna z pozostałych odpowiedzi nie spełnia wszystkich tych kryteriów. Nawet
^\p{L}{2,}$
, która jest najbliższa, nie spełnia wymagań, ponieważ będzie również dopasowywać znaki „niewidoczne”, takie jakU+FEFF
(Spacja bez przerwy o zerowej szerokości).źródło
Wypróbuj te rozwiązania, aby uzyskać maksymalną kompatybilność, jak już napisałem tutaj :
JavaScript:
var nm_re = /^(?:((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-.\s])){1,}(['’,\-\.]){0,1}){2,}(([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-. ]))*(([ ]+){0,1}(((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){1,})(['’\-,\.]){0,1}){2,}((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){2,})?)*)$/;
HTML5:
<input type="text" name="full_name" id="full_name" pattern="^(?:((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-.\s])){1,}(['’,\-\.]){0,1}){2,}(([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-. ]))*(([ ]+){0,1}(((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){1,})(['’\-,\.]){0,1}){2,}((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){2,})?)*)$" required>
źródło
Wydaje się, że to działa dla mnie:
źródło
Prosta funkcja wykorzystująca preg_match w php
źródło
Pełna nazwa z tylko jedną spacją:
źródło
Jeśli chcesz, aby całe imię miało od 3 do 30 znaków bez ograniczeń co do poszczególnych słów, spróbuj tego:
Pamiętaj, że wyklucza wszystkie obce litery, takie jak é, è, à, ï.
Jeśli chcesz, aby do każdego słowa obowiązywało ograniczenie od 3 do 30 znaków, regexp Jens zrobi to.
źródło
źródło