正则表达式不工作/生效

时间:2018-02-05 09:18:21

标签: php regex

我有一些从TextField获取的值,存储到一个数组,我将通过for循环过滤它。我想要保留像[]{};等符号,同时也允许空格和-的某些单词。所以,我构建了这个:

$Regex = '/^[a-zA-ZÀ-ÖØ-öø-ÿ0-9 \-]*$/';
$FieldRegex = (preg_match($Regex, $Field[$counter]));

for ($counter = 0; $counter <= 6; $counter++){

if(!$FieldRegex) {

                echo '<script language="javascript">';
                echo 'alert("Only numbers, letters and - are allowed!")';
                echo '</script>';

                header("Location:{$_SERVER['HTTP_REFERER']}");
                break;
                exit;

} else {
                if($counter == 6){
                $Proceed1 = true;
}

每次尝试持续存在的问题是我尝试提交的任何内容,它不会给我任何消息,也不会保存到数据库中,即使它符合正则表达式参数。

我一直围绕着它,但似乎无法找到答案。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您应该使用包含Unicode字符的模式的u修饰符,以便在所有情况下都能正常工作,并且您还需要将$counter设置代码行放在循环中以使变量得到正确分配了值:

$Regex = '/^[a-zA-ZÀ-ÖØ-öø-ÿ0-9 -]*$/u';
for ($counter = 0; $counter <= 6; $counter++){
    if(!preg_match($Regex, $Field[$counter])) {
                echo '<script language="javascript">';
                echo 'alert("Only numbers, letters and - are allowed!")';
                echo "</script>\n";
                header("Location:{$_SERVER['HTTP_REFERER']}");
                break;
                exit;

    } else {
                if($counter == 6){
                    $Proceed1 = true;
                }
    }
}

请参阅PHP demo

请注意,如果您需要匹配任何字母,可以将'/^[a-zA-ZÀ-ÖØ-öø-ÿ0-9 -]*$/u';正则表达式更改为'/^[\p{L}0-9 -]*$/u';,其中\p{L}与任何Unicode字母匹配。