我有一些从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;
}
每次尝试持续存在的问题是我尝试提交的任何内容,它不会给我任何消息,也不会保存到数据库中,即使它符合正则表达式参数。
我一直围绕着它,但似乎无法找到答案。
我做错了什么?
答案 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字母匹配。