How can I get a string that only contains a to z, A to Z, 0 to 9 and some symbols?
Asked
Active
Viewed 9.5k times
12
-
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
6 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
- 367,681
- 72
- 526
- 573
29
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,655
- 3
- 39
- 45
-
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
Guilherme Nascimento
- 8,794
- 8
- 51
- 118
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
- 147,060
- 89
- 388
- 491
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
- 20,351
- 17
- 80
- 103