Szukam funkcji php, która pobierze ciąg wejściowy i zwróci jego oczyszczoną wersję, usuwając wszystkie znaki specjalne, pozostawiając tylko alfanumeryczne.
Potrzebuję drugiej funkcji, która robi to samo, ale zwraca tylko znaki alfabetu AZ.
Każda pomoc bardzo doceniona.
unichars '\p{Latin}' '\p{Alphabetic}' '[^A-Za-z]' | wc -l
== 1192 punkty kodowe, które są alfabetem łacińskim, ale nie są AZ. Powszechnie uważa się, że ASCII jest wystarczające dla języka angielskiego. Tak nie jest i dlatego pisanie AZ ma w sobie zapach kodu .Odpowiedzi:
Ostrzeżenie: pamiętaj, że język angielski nie jest ograniczony tylko do AZ.
Spróbuj tego, aby usunąć wszystko oprócz az, AZ i 0-9:
Jeśli Twoja definicja alfanumerycznego obejmuje litery w językach obcych i przestarzałe skrypty, będziesz musiał użyć klas znaków Unicode.
Spróbuj tego, aby zostawić tylko AZ:
Powodem ostrzeżenia jest to, że słowa takie jak życiorys zawierają literę
é
, która nie będzie pasować. Jeśli chcesz dopasować określoną listę liter, dostosuj wyrażenie regularne, aby zawierało te litery. Jeśli chcesz dopasować wszystkie litery, użyj odpowiednich klas znaków, jak wspomniano w komentarzach.źródło
[\p{Alphabetic}\p{Numeric}]
. Zapomniałem o właściwości alfabetu PCRE, ale można ją przybliżyć[\pL\pM\pN]
.[A-Z]
jest czasami błędna .i
ale zawsze muszę się tylko martwić o angielską grupę demograficzną ... Zapomniałem, że wielu ludzi musi myśleć o innych językach. BTW Właśnie zauważyłem, że jesteś najczęściej reprezentowanym użytkownikiem, który nigdy nie zadał 1 pytania. Nawet Jon Skeet zadawał już pytania!Zamiast tego
preg_replace
zawsze możesz użyć funkcji filtrujących PHP, używającfilter_var()
funkcji withFILTER_SANITIZE_STRING
.źródło
FILTER_SANITIZE_STRING
? O ile mi wiadomo, najbliższe archiwizowanie w ten sposób to zFILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH
, ale to nie pozostawia tylko liter i cyfr, ale także kropek, ukośników, procentów i tak dalej.źródło