Я пытаюсь закодировать форму для входа в систему, используя php, чтобы проверить это. Но я не могу проверить, есть ли у меня какие-либо пробелы и специальные символы для имени пользователя. Я пытался использовать [\ W] +, но это не сработало.
<?php
$usernerr = "";
$passwerr = "";
$usern = "";
$passw = "";
$pattern = '/[\'\/~`\!@#\$%\^&\*\(\)_\-\+=\{\}\[\]\|;:"\<\>,\.\?\\\]/';
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(empty($_POST['uname']))
{
$usernerr = "*Please add a username please!";
}
else
{
$usern = clearInput($_POST['uname']);
if(!preg_match('/s/', $usern) || !preg_match($pattern, $usern))
{
$usernerr = "*Username have only letters and numbers!";
}
$usernerr = "";
}
if(empty($_POST['psw']))
{
$passwerr = "*Please add a password please!";
}
else
{
$passw = clearInput($_POST['psw']);
$passwerr = "";
}
}
function clearInput($input)
{
$input = trim($input);
$input = stripslashes($input);
$input = htmlspecialchars($input);
return $input;
}
?>
Учитывая сообщение об ошибке, которое вы написали, вы усложняете себя.
Вместо поиска списка символов, которые не являются буквенно-цифровыми, ищите только буквенно-цифровые символы. Попробуйте использовать этот шаблон, и не отрицайте условие.
$pattern = "/^[a-zA-Z0-9]+$/";
// Some code...
if(preg_match($pattern, $usern))
// ^-------------------------------Notice the changes
{
//Username is valid
}
Описание шаблона:
^
с самого начала
[a-zA-Z0-9]
поиск по альфа-номеру
+
1 или более раз
$
к концу
/^[a-zA-Z0-9]+$/
можно заменить на /^[[:alnum:]]+$/
или же /^[a-z\d]+$/i
которые производят тот же эффект.
Других решений пока нет …