How can I get a string that only contains a to z, A to Z, 0 to 9 and some symbols?
Asked
Active
Viewed 1e+01k times
13
-
Please give more details. What is your need? – Karthik May 24 '10 at 11:08
-
4It's a hazy question but there is no need to downvote it into oblivion. There are *really* bad questions around that could use that sort of treatment, but this one is not one of them. – Pekka May 24 '10 at 11:16
-
my string is ��S�o�n�u� �N�i�g�a�m�,� �S�a�i�n�d�h�a�v�i. i would like to eliminate the symbols... – zahir hussain May 24 '10 at 11:25
-
use like this, $strchr = "��S�o�n�u� �N�i�g�a�m�,� �S�a�i�n�d�h�a�v�i"; $bodytag = str_replace("�", "", $strchr); – Karthik May 24 '10 at 11:35
-
nice it works... that was already worked... i just restart my mozilla... i got it.. thanks a lot to all... – zahir hussain May 24 '10 at 12:18
7 Answers
30
You can filter it like:
$text = preg_replace("/[^a-zA-Z0-9]+/", "", $text);
As for some symbols, you should be more specific

Sarfraz
- 377,238
- 77
- 533
- 578
30
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 ]

Serge S.
- 4,855
- 3
- 42
- 46
-
You're absolutely right, I should have to surround the pattern in `^` and `$` to prevent match to `'??abs??'` for example, and the whole with `/` delimiters. Sorry & thanks. – Serge S. May 24 '10 at 19:35
12
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 spacectype_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 characterctype_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

Protomen
- 9,471
- 9
- 57
- 124
1
Both these regexes should do it:
$str = preg_replace('~[^a-z0-9]+~i', '', $str);
Or:
$str = preg_replace('~[^a-zA-Z0-9]+~', '', $str);

Alix Axel
- 151,645
- 95
- 393
- 500
0
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!

Aditya P Bhatt
- 21,431
- 18
- 85
- 104
0
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.

Karue Benson Karue
- 957
- 12
- 26