优先考虑字符串验证消息

Prioritize string validation messages

在 PHP 中,我们如何才能将一项检查的结果消息优先于另一项检查?

我的 PHP 文件中有两个不同的 if 条件和两条不同的消息。

有些字符串两者都匹配,但即使 if (preg_match) 在脚本中位于 if !(preg_match) 上方,结果也会显示 !(preg_match)

的错误消息

示例:

if (preg_match('/^[\x{0600}-\x{06FF}]*$/u', $value)){
$return = $register_msg['ihc_error_please_write_yourname_in_english'];
}
if (!preg_match('~[eyuioa]~',$value)) {
$return = $register_msg['ihc_error_no_vowels_found'];
}

现在当用户通过阿拉伯字符输入他的名字时,虽然他的字符串符合两个条件,但不幸的是他得到 ['ihc_error_no_vowels_found'] 而不是 ['ihc_error_please_write_yourname_in_english'].

您可以使用

$register_msg = ['ihc_error_please_write_yourname_in_english' => 'English, please!', 'ihc_error_no_vowels_found' => 'No vowels!' ];
$value = 'سبعة';

$return = "";
if (preg_match('/^[\x{0600}-\x{06FF}]*$/u', $value)){
    $return .= $register_msg['ihc_error_please_write_yourname_in_english'] . PHP_EOL;
} else if (preg_match('~^[A-Za-z]+$~',$value) && !preg_match('~[eyuioa]~',$value)) {
    $return .= $register_msg['ihc_error_no_vowels_found'] . PHP_EOL;
}

echo $return;

查看 PHP demo 用阿拉伯语单词产生的结果

English, please!

并使用 SFGH 值(参见 this PHP demo)产生

No vowels!

preg_match('~^[A-Za-z]+$~',$value) 检查字符串是否只包含 1+ 个 ASCII 字母。