12

How can I get a string that only contains a to z, A to Z, 0 to 9 and some symbols?

Peter Mortensen
  • 30,030
  • 21
  • 100
  • 124
zahir hussain
  • 3,611
  • 9
  • 28
  • 36
  • Please give more details. What is your need? – Karthik May 24 '10 at 11:08
  • 4
    It'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 Answers6

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:

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
-1

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

RHaguiuda
  • 3,117
  • 9
  • 36
  • 53