开发者

Regex to find only letters using PHP

I am trying to create a regex which will detect if a string has only letters in it. Can anyone tell me if the following code does that correctly?

$text = "asdsad";
if (ereg('[^A-Za-z]', $text)) {
  开发者_JAVA百科echo "More then letters";
}

else {
  echo "only letters";    
}


The condition evaluates to true, if that is what you meant.

You want to make sure a string has letters only?

Try this...

if (preg_match('/^\pL+$/u', $text)) {
   echo "Letters only";
} else {
   echo "More than letters";
}

See it on ideone.

So you can understand a few things...

  • ereg() has been deprecated as of PHP 5.3. Stop using it, and use preg_match().
  • When using a regex with preg_match(), you need to specify a regex delimiter. Most regex flavours use /, but PHP lets you use most matching pair of chars, e.g. ~
  • You are missing start and end anchors. This means you won't be matching the string from start to finish
  • Use Unicode regex where available, so non ASCII letters are still detected.

Update

Test cases.

PHP

$testCases = array(
    '',
    'abc',
    '123',
    'لإنجليزية',
    'abc1',
    'русский'
);

foreach($testCases as $str) {
    echo '"' . $str . '" letters only? ' . var_export((bool) preg_match('/^\pL+$/u', $str), TRUE) . "\n";
}

Output

"" letters only? false
"abc" letters only? true
"123" letters only? false
"لإنجليزية" letters only? true
"abc1" letters only? false
"русский" letters only? true


A better solution not using regular expression would be to use ctype_alpha

http://au2.php.net/manual/en/function.ctype-alpha.php

As long as using the current locale, not just assuming the alphabet is a-zA-Z, is suitable.

0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜