Aby sprawdzić, czy wprowadzana przez użytkownika angielska nazwa jest poprawna, zwykle dopasowuję dane wejściowe do wyrażenia regularnego, takiego jak [A-Za-z]. Ale jak to zrobić, jeśli obsługa wielu języków (takich jak chiński, japoński itp.) Jest wymagana przy kodowaniu utf8?Weryfikacja wielu języków z kodowaniem UTF-8
Odpowiedz
Można zbliżenie właściwość pochodzącą Unicode \p{Alphabetic}
dość succintly z [\pL\pM\p{Nl}]
jeśli język doensn't wspierania prawidłowego Własność Alphabetic bezpośrednio.
Nie używaj języka Java \p{Alpha}
, ponieważ that’s ASCII-only.
Ale wtedy zauważysz, że już nie stanowią kresek (\p{Pd}
lub DashPunctuation robót, ale to nie robi obejmują większość kresek!), Apostrofy (zazwyczaj, ale nie zawsze jeden z U +27, U + 2BC, U + 2019 lub U + FF07), przecinek lub kropka/kropka.
Prawdopodobnie lepiej było włączyć \p{Pc}
ConnectorPunctuation, na wszelki wypadek.
Jeśli posiadasz właściwość pochodną w standardzie Unicode \p{Diacritic}
, powinieneś również użyć jej, ponieważ zawiera ona takie elementy, jak środkowa kropka potrzebna do geminacji L w języku katalońskim oraz nie łączące się formy znaków diakrytycznych, których czasami używają ludzie.
Ale wtedy znajdziesz ludzi, którzy korzystają z numerów porządkowych w ich nazw w sposób, który \p{Nl}
(LetterNumber) nie pomieści, więc rzucasz \p{Nd}
(DecimalNumber) lub nawet wszystkich \pN
(Liczba) do miksu.
Wtedy zdajesz sobie sprawę, że nazwy azjatyckich często wymagają użycia ZWJ lub ZWNJ być napisane poprawnie w swoich skryptach, więc wtedy trzeba dodać U + 200D i U + 200C do mieszanki, które są zarówno \p{Cf}
(Format) znaków, a nawet JoinControl te.
Kiedy skończysz looking up the various Unicode properties dla różnych egzotycznych i wielu znaków, które pojawiają się utrzymać - lub gdy myślisz skończysz, raczej - jesteś prawie na pewno stwierdzić, że można zrobić wiele lepsza praca w tym przypadku, jeśli po prostu pozwolisz im używać dowolnych znaków Unicode dla swojego imienia, które chcą, jak zaleca the link Tim cites.Tak, dostaniesz kilka żartownisiów w stylu "əɯɐuʇƨɐ⅂ əɯɐuʇƨɹᴉℲ", ale to się zgadza z terytorium i nie można wykluczyć głupich nazw w jakikolwiek rozsądny sposób.
Nie wiem, co mi się bardziej podoba w tej odpowiedzi: fakt, że w rzeczywistości odpowiada na pytanie, że potencjalnie wiele mówi o wyrażeniach regularnych unicode w ogóle, lub o tym, że zwięźle pokazuje, dlaczego próba sprawdzenia prawdziwych nazw jest złym pomysłem. –
Zastanów się, czy naprawdę musisz zweryfikować nazwę użytkownika. Może powinieneś pozwolić użytkownikom nazywać siebie, jak tylko chcą.
Z pewnością nie należy używać [A-Za-z]
, ponieważ niektóre osoby mają nazwy z apostrofami lub myślnikami. To może być dość obraźliwe, aby uniemożliwić komuś użycie prawdziwego nazwiska tylko dlatego, że nie przestrzega twoich arbitralnych reguł, jak powinno wyglądać imię.
W PHP Używam tego paskudnego Hack: (. E, I, etc)
setlocale(LC_ALL, 'de_DE');
preg_match('/^[[:alpha:]]+$/', $name);
To obejmuje "Przegłosy" (czyli 'a', 'O' i tym podobne) plus akcentowane samogłoski. Ale daleki do sprawdzania poprawności dla cyrylicy (Rosja, Bułgaria, ...) lub znaków chińskich ...
- 1. Różnica między kodowaniem .UTF8.GetBytes i UTF8Encoding.Default.GetBytes
- 2. Ramy testowania wielu języków
- 3. definiowanie wielu języków w html
- 4. Obsługa wielu języków w wersji scenorysów
- 5. Obsługa wielu języków w Universal App
- 6. Obsługa wielu języków w języku C#
- 7. Technika ASP MVC do obsługi wielu języków
- 8. Wiele baz danych SQLite dla wielu języków?
- 9. Obsługa wielu języków w aplikacji WinForm
- 10. SWF z kodowaniem Speex?
- 11. Pliki RD z innym kodowaniem
- 12. Problem z kodowaniem w Javie
- 13. Kodowanie UTF8 z NSString
- 14. utf8 w Perlu i MySql
- 15. Czy znasz dobry, szybki przewodnik referencyjny dla wielu języków programowania?
- 16. Jak wrócić do wielu języków w Django w czasie wykonywania?
- 17. Mechanizm automatycznego budowania i testowania języków dla wielu projektów
- 18. Obsługa wielu języków bez opóźnień w systemie Android TTS
- 19. Łącza do iTunes Przesyłanie zbiorcze zrzutów ekranu dla wielu języków
- 20. Weryfikacja użycia wielu tekstur za pomocą kostek three.js
- 21. Najlepszy sposób na implementację wielu języków w Zend Framework
- 22. weryfikacja odłączonego podpisu z BC
- 23. Weryfikacja podpisu z transakcji iOSReceipt
- 24. Weryfikacja numeru telefonu z Androidem
- 25. Wiele języków IDE
- 26. Maszyna wirtualna działa z natywnym kodowaniem nazwy latin1, co może spowodować nieprawidłowe działanie urządzenia Elixir, ponieważ oczekuje on utf8
- 27. C# MailMessage do strumienia - problem z kodowaniem
- 28. Problem z kodowaniem znaków w Tomcat
- 29. Edytor HTML z kodowaniem html wbudowanym
- 30. Problem z kodowaniem plików kompilatora Java kompilacji
Jakiego języka/implementacji wyrażenia regularnego używasz? – Gumbo
Idealnie obsługuje wszystkie języki, czy to możliwe? – Hongbo
Myślę, że Gumbo oznacza "jakiego języka programowania używasz?" –