2015-11-22 4 views
2

Я только хочу, чтобы пользователи могли использовать буквы, цифры и некоторые иностранные буквы. Это работает, но оно удаляет иностранные буквы (например, öçşğ).Разрешать только буквы, цифры и некоторые иностранные буквы?

preg_replace('/[^a-zA-Z0-9\s]/', '', $nick) 

Так что я использовал ниже, чтобы разрешить некоторые иностранные буквы, но он по-прежнему удаляет иностранные буквы.

preg_replace("@[^A-Za-z0-9\- şıüğçİŞĞÜÇ][email protected]","",$nick); 

Каков правильный подход для их разрешения?

+0

Используйте 'u' флаг для Юникода. – Rizier123

+0

Не могли бы вы показать мне, как? – user198989

+2

'.... + @ iu' <- this' u' – Berriel

ответ

1

Закрыть. Просто нужен (PCRE_UTF8) модификатор u и вы пропустили букву "ö";)

preg_replace("@[^A-Za-z0-9\-\sşıüöğçİŞĞÜÖÇ][email protected]", '', 'Öm$ür Y_ağız'); 

возвращает Ömür Yağız

непроверенная, но вы можете быть в состоянии упростить регулярное выражение:

@[^a-z0-9şıüöğçİ -]@iu 
+0

Предупреждение: preg_replace(): Ошибка компиляции: неверная строка UTF-8 со смещением 15 в ... – user198989

+0

А в этом случае вам нужно подставить символы значениями unicode, например. '@ [^ A-Za-z0-9 \ - \ s \ x {011F} \ x {011E}] + @ iu' (в качестве примера я добавил только« '') – tanerkuc

+1

Я не могу вспомнить в верхней части моей головы, если это расширение, например, 'mbstring' или параметр локали для поддержки символов UTF-8 в строках, но это можно сделать :) – tanerkuc

2

Если вы хотите использовать символы, специфичные для языка, вы можете использовать следующую конструкцию, которая более понятна, чем писать все конкретные символы вашего языка в регулярном выражении:

preg_replace("/[^\w\p{Latin}]+/", '', 'Öm$ür Y_ağız'); 

И заменить «латынь» на свой собственный набор символов Юникода из http://php.net/manual/en/regexp.reference.unicode.php

+0

Так что это позволит только латинским символам, правильно? Как разрешить только буквы, цифры и эти латинские символы? – user198989

+0

Правильно, это позволяет латинские символы, цифры и «_». Если вы хотите разрешить буквы, цифры и эти латинские символы своим регулярным выражением, это для вас –

+0

Для большинства языков не существует специальных скриптов, поэтому для турецкого языка вам придется использовать латинский скрипт, который позволяет турецким персонажам, но позволяет использовать нежелательные символы с испанского языка , Французский и несколько других языков. Поскольку количество букв вне диапазона A-Z обычно составляет одну цифру, лучше всего просто перечислить их. – tanerkuc

Смежные вопросы