Muszę usunąć wszystkie znaki z ciągu, który nie jest w a-z A-Z 0-9
zestawie lub nie jest spacją.
Czy ktoś ma do tego funkcję?
Wygląda na to, że prawie wiedziałeś już, co chcesz zrobić, w zasadzie zdefiniowałeś to jako wyrażenie regularne.
preg_replace("/[^A-Za-z0-9 ]/", '', $string);
preg_replace('/[^A-Za-z0-9 ]/', '', $string);
W przypadku znaków Unicode jest to:
źródło
\w
obejmuje,\d
a więc nie\d
jest konieczne. Jest to również błędne, ponieważ pozostawi podkreślenia w wynikowym ciągu (który jest również zawarty w\w
).i
flaga jest tu naprawdę konieczna, ponieważ[:alnum:]
obejmuje już oba przypadki?Wyrażenie regularne jest twoją odpowiedzią.
i
Oznacza wielkość liter ma znaczenie.^
oznacza, że nie zaczyna się.\d
pasuje do dowolnej cyfry.a-z
dopasowuje wszystkie znaki pomiędzya
iz
. Ze względu nai
parametr, którego nie musisz określaća-z
iA-Z
.\d
spacji, więc spacje są dozwolone w tym wyrażeniu regularnym.źródło
oto naprawdę prosty regex:
i używane tak, jak potrzebujesz (z
/
ogranicznikiem do przodu ).Przetestuj to tutaj za pomocą tego wspaniałego narzędzia, które wyjaśnia, co robi regex:
http://www.regexr.com/
źródło
/u
flagi, w przeciwnym razie usuwane są również litery inne niż ascii.[\W_]+
Jeśli chcesz obsługiwać inne języki zamiast typowego AZ, możesz użyć następujących opcji:
[^\p{L}\p{N} ]
definiuje negowaną (pasuje do znaku, który nie jest zdefiniowany) klasę znaków:\p{L}
: list z dowolnego języka.\p{N}
: znak numeryczny w dowolnym skrypcie.: znak spacji.
+
łapczywie dopasowuje klasę postaci od 1 do nieograniczonej liczby razy.Pozwoli to zachować litery i cyfry z innych języków i skryptów, a także AZ:
Uwaga: To bardzo stare, ale wciąż aktualne pytanie. Odpowiadam wyłącznie w celu dostarczenia dodatkowych informacji, które mogą być przydatne dla przyszłych gości.
źródło
Zaznacza wszystkie nie AZ, az, 0-9 i usuwa.
Zobacz przykład tutaj: https://regexr.com/3h1rj
źródło
\W
jest odwrotnością tego,\w
które są postaciamiA-Za-z0-9_
. Dopasuje więc\W
każdą postać, która nie jest,A-Za-z0-9_
i usunie je. Jest[]
to granica zestawu znaków .+
Jest zbędny na zbiorze znaków granicy, ale zwykle oznacza 1 lub więcej znaków.u
Flag rozszerza wyraz m.in. Unicode wsparcie charakter, co oznacza, że nie usunie znaki poza kodem 255 znaków takich jakª²³µ
. Przykład różnych zastosowań 3v4l.org/hSVV5 ze znakami Unicode i Ascii .Możesz to przetestować tutaj: http://regexr.com/
źródło
Ja też szukałem odpowiedzi i moim zamiarem było wyczyszczenie każdego alfy i nie powinno być więcej niż jedno miejsce.
Więc zmodyfikowałem odpowiedź Alexa na to i to działa na mnie
preg_replace('/[^a-z|\s+]+/i', ' ', $name)
Wyrażenie regularne powyżej zmieniło
sy8ed sirajul7_islam
się wsy ed sirajul islam
Objaśnienie: regex nie sprawdzi ŻADNEGO od a do z w przypadku niewrażliwego sposobu lub więcej niż jednej białej spacji i zostanie przekonwertowany na pojedynczy przestrzeń.
źródło
Możesz podzielić ciąg na znaki i przefiltrować.
źródło
preg_replace()
wywołaniem.