正则表达式只使用PHP查找字母

Kar*_*mam 0 php regex

我正在尝试创建一个正则表达式,它将检测字符串中是否只有字母.任何人都可以告诉我,以下代码是否正确吗?

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

else {
  echo "only letters";    
}
Run Code Online (Sandbox Code Playgroud)

ale*_*lex 11

如果这是你的意思,条件评估为真.

你想确保字符串只有字母吗?

试试这个...

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

在ideone上看到它.

所以你可以理解一些事情......

  • ereg()自PHP 5.3起已被弃用.停止使用它,并使用preg_match().
  • 使用正则表达式时preg_match(),需要指定正则表达式分隔符.大多数正则表达式使用/,但PHP允许您使用大多数匹配的字符,例如~
  • 您缺少开始和结束锚点.这意味着您将不会从头到尾匹配字符串
  • 在可用的情况下使用Unicode正则表达式,因此仍会检测到非ASCII字母.

更新

测试用例.

PHP

$testCases = array(
    '',
    'abc',
    '123',
    '?????????',
    'abc1',
    '???????'
);

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

产量

"" letters only? false
"abc" letters only? true
"123" letters only? false
"?????????" letters only? true
"abc1" letters only? false
"???????" letters only? true
Run Code Online (Sandbox Code Playgroud)