开发者

Allow only [a-z][A-Z][0-9] in string using PHP

How can I get a开发者_运维技巧 string that only contains a to z, A to Z, 0 to 9 and some symbols?


You can filter it like:

$text = preg_replace("/[^a-zA-Z0-9]+/", "", $text);

As for some symbols, you should be more specific


You can test your string (let $str) using preg_match:

if(preg_match("/^[a-zA-Z0-9]+$/", $str) == 1) {
    // string only contain the a to z , A to Z, 0 to 9
}

If you need more symbols you can add them before ]


Don't need regex, you can use the Ctype functions:

  • ctype_alnum: Check for alphanumeric character(s)
  • ctype_alpha: Check for alphabetic character(s)
  • ctype_cntrl: Check for control character(s)
  • ctype_digit: Check for numeric character(s)
  • ctype_graph: Check for any printable character(s) except space
  • ctype_lower: Check for lowercase character(s)
  • ctype_print: Check for printable character(s)
  • ctype_punct: Check for any printable character which is not whitespace or an alphanumeric character
  • ctype_space: Check for whitespace character(s)
  • ctype_upper: Check for uppercase character(s)
  • ctype_xdigit: Check for character(s) representing a hexadecimal digit

In your case use ctype_alnum, example:

if (ctype_alnum($str)) {
    //...
}

Example:

<?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.';

    }
}

Online example: https://ideone.com/BYN2Gn


Both these regexes should do it:

$str = preg_replace('~[^a-z0-9]+~i', '', $str);

Or:

$str = preg_replace('~[^a-zA-Z0-9]+~', '', $str);


A shortcut will be as below also:

if (preg_match('/^[\w\.]+$/', $str)) {
    echo 'Str is valid and allowed';
} else
    echo 'Str is invalid';

Here:

// string only contain the a to z , A to Z, 0 to 9 and _ (underscore)
\w - matches [a-zA-Z0-9_]+

Hope it helps!


If you need to preserve spaces in your string do this

$text = preg_replace("/[^a-zA-Z0-9 ]+/", "", $text);

Please note the way I have added space between 9 and the closing bracket. For example

$name = "!#$John Doe";
echo preg_replace("/[^a-zA-Z0-9 ]+/", "", $name);

the output will be: John Doe

Spaces in the string will be preserved.

If you fail to include the space between 9 and the closing bracket the output will be:

JohnDoe

Hope it helps someone.


The best and most flexible way to accomplish that is using regular expressions. But I`m not sure how to do that in PHP but this article can help. link

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜