54

I have tried:

preg_match("/^[a-zA-Z0-9]", $value)

but im doing something wrong i guess.

ajreal
  • 46,720
  • 11
  • 89
  • 119
Jason94
  • 13,320
  • 37
  • 106
  • 184

5 Answers5

114

1. Use PHP's inbuilt ctype_alnum

You dont need to use a regex for this, PHP has an inbuilt function ctype_alnum which will do this for you, and execute faster:

<?php
$strings = array('AbCd1zyZ9', 'foo!#$bar');
foreach ($strings as $testcase) {
    if (ctype_alnum($testcase)) {
        echo "The string $testcase consists of all letters or digits.\n";
    } else {
        echo "The string $testcase does not consist of all letters or digits.\n";
    }
}
?>

2. Alternatively, use a regex

If you desperately want to use a regex, you have a few options.

Firstly:

preg_match('/^[\w]+$/', $string);

\w includes more than alphanumeric (it includes underscore), but includes all of \d.

Alternatively:

/^[a-zA-Z\d]+$/

Or even just:

/^[^\W_]+$/
Timofey Drozhzhin
  • 4,416
  • 3
  • 28
  • 31
SW4
  • 69,876
  • 20
  • 132
  • 137
26

You left off the / (pattern delimiter) and $ (match end string).

preg_match("/^[a-zA-Z0-9]+$/", $value)
Kendall Hopkins
  • 43,213
  • 17
  • 66
  • 89
14
  • Missing end anchor $
  • Missing multiplier
  • Missing end delimiter

So it should fail anyway, but if it may work, it matches against just one digit at the beginning of the string.

/^[a-z0-9]+$/i
KingCrunch
  • 128,817
  • 21
  • 151
  • 173
3

As the OP said that he wants letters and numbers ONLY (no underscore!), one more way to have this in php regex is to use posix expressions:

/^[[:alnum:]]+$/

Note: This will not work in Java, JavaScript, Python, Ruby, .NET

Andrew
  • 490
  • 7
  • 21
-2

try this way .eregi("[^A-Za-z0-9.]", $value)

pooja
  • 2,334
  • 3
  • 16
  • 16
  • 4
    ereg/eregi are old functions. Use preg_match instead. Also, you should add the i identifier so letters are case insensitive. – ChrisH Apr 20 '12 at 09:42