如果输入特殊字符,则无效


Invalid if Special Character is entered

我目前在下面有这个代码,它只验证用户名长度。如果未输入,则会显示错误消息,如果输入的字符少于 3 个,则会显示错误消息。我想添加一个if/else语句,如果用户输入特殊字符,如!@#$%^&*()+=/?等......唯一允许的特殊字符是下划线 (_) 和连字符 (-)...帮我如何。

谢谢

这是我的代码:

<?php
$serror="";
if (isset($_POST['submit'])) {              
    $username=$_POST['username'];
    $lengt = strlen($username);
    if($lengt == 0){
        $serror=" Please enter account username ";
    }
    else{
        if($lengt < 3 ){            
            $serror=" Please enter valid account username ";
        }
    }
    if($serror==""){
        ob_start();
        echo "Success";
        header("Location:progress.php?username=$username");
        exit;
        ob_end_flush();
    }
    else{}              
}
?>

使用preg_match() function

$yourString = "blahblah";
if (preg_match('/^[A-Za-z0-9_-]*$/', $yourString)) {
    #your string is good
} 

记住preg_match()返回布尔值

您的 php 脚本在用户提交表单后工作。从问题中的标签中,我假设您可以使用javascript。使用Javascript,您可以在提交表单之前捕获这些错误。

因此,您的 html 输入字段将触发一个脚本,您可以使用 onkeypress 事件来查看击键的值。

提交

按钮还将有一个javascript事件来查找最小字符串长度,否则给出警告而不是提交表单。

正如其他人已经指出的那样,您应该为此使用正则表达式。

尝试使用以下 if 语句(允许 a-z、数字、下划线和连字符)。它还检查长度是否至少为 3 个字符:

if (!preg_match("/^(['w'-]{3,})$/", $username)) {
    $error = "Not enough chars or there are invalid ones".
}

在此处阅读有关 preg_match() 的更多信息