Как получить строку, содержащую только от a до z, от A до Z, от 0 до 9 и некоторые символы?
Вы можете отфильтровать его следующим образом:
$text = preg_replace("/[^a-zA-Z0-9]+/", "", $text);
Что касается некоторых символов , вы должны быть больше конкретный
Вы можете проверить свою строку (пусть $str), используя preg_match:
$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 }
Если вам нужно больше символов, вы можете добавить их до ]
]
Не нужно регулярное выражение, вы можете использовать функции Ctype:
Ctype
ctype_alnum
ctype_alpha
ctype_cntrl
ctype_digit
ctype_graph
ctype_lower
ctype_print
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
Оба эти регулярных выражения должны сделать это:
$str = preg_replace('~[^a-z0-9]+~i', '', $str);
Или:
$str = preg_replace('~[^a-zA-Z0-9]+~', '', $str);
Ярлык будет так же, как показано ниже:
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_]+
Надеюсь, это поможет!
Лучший и наиболее гибкий способ достижения этой цели - использование регулярных выражений.Но я не уверен, как это сделать в PHP, но эта статья может помочь. ссылка