Как я могу получить строку, содержащую только от z до z, от A до Z, от 0 до 9 и некоторые символы?
Вы можете проверить свою строку (пусть $str
), используя preg_match
:
if(preg_match("/^[a-zA-Z0-9]+$/", $str) == 1) { // string only contain the a to z , A to Z, 0 to 9 }
Если вам нужно больше символов, вы можете добавить их до ]
Вы можете отфильтровать его так:
$text = preg_replace("/[^a-zA-Z0-9]+/", "", $text);
Что касается некоторых символов , вы должны быть более конкретными
Не нужно регулярное выражение, вы можете использовать функции Ctype
:
ctype_alnum
: проверьте буквенно-цифровые символы (символы) ctype_alpha
: проверьте буквенный символ (символы) ctype_cntrl
: Проверить управляющий символ (ы) ctype_digit
: проверьте числовой символ (ы) ctype_graph
: проверьте наличие любых печатных символов, кроме пробелов ctype_lower
: проверьте строчный символ (символы) ctype_print
: проверка для печати символов (ов) ctype_punct
: проверьте наличие любого ctype_punct
символа, который не является пробелом или буквенно-цифровым символом ctype_space
: проверить пробельные символы (ы) ctype_upper
: проверьте символы верхнего регистра ctype_xdigit
: проверить символ (символы), представляющий шестнадцатеричную цифру В вашем случае используйте ctype_alnum
, например:
if (ctype_alnum($str)) { //... }
Пример:
<?php $strings = array('AbCd1zyZ9', 'foo!#$bar'); foreach ($strings as $testcase) { if (ctype_alnum($testcase)) { echo 'The string ', $testcase, ' consists of all letters or digits.'; } else { echo 'The string ', $testcase, ' don\'t consists of all letters or digits.'; } }
Пример онлайн: https://ideone.com/BYN2Gn
Почему эти «символы» там в первую очередь? Мне кажется, что вы читаете текст из источника, который закодирован как UTF-16, но вы декодируете его как нечто другое, например latin1 или ASCII.
Оба эти регулярных выражения должны сделать это:
$str = preg_replace('~[^a-z0-9]+~i', '', $str);
Или:
$str = preg_replace('~[^a-zA-Z0-9]+~', '', $str);
Лучший и самый гибкий способ добиться этого – использовать регулярные выражения. Но я не уверен, как это сделать на PHP, но эта статья может помочь. ссылка
Ярлык будет также ниже:
if (preg_match('/^[\w\.]+$/', $str)) { echo 'Str is valid and allowed'; } else echo 'Str is invalid';
Вот:
// string only contain the a to z , A to Z, 0 to 9 and _ (underscore) \w - matches [a-zA-Z0-9_]+
Надеюсь, поможет!