2016-07-10 2 views
0

У меня есть этот код, ниже которого проверяется только длина имени пользователя. Если ни один из них не вводится, будет отображаться сообщение об ошибке, если введено менее 3 символов, появится сообщение об ошибке. Я хочу добавить оператор if/else, что если пользователь вводит специальные символы, такие как [email protected]#$%^&*()+=/? и т. Д. ... разрешен только специальный символ - подчеркивание (_) и hypen (-) ... Помогите мне как.Недействительный, если введен специальный символ

благодаря

вот код у меня есть:

<?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{}    
} 
?> 
+0

вы можете использовать регулярные выражения для обнаружения нежелательных символов или разрешить только допустимые символы – CodeToad

ответ

0

использование preg_match() function

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

Remeber preg_match() возвращает булево

+0

Это должно работать. Эта модель также должна работать: '/^([\ w \ -] +) $ /' –

0

Ваш PHP скрипт работает после того, как пользователь отправляет форму. Из ваших тегов в вопросе я предполагаю, что вы можете использовать javascript. С помощью Javascript вы обнаружите эти ошибки до отправки формы.

Итак, ваше поле ввода html запускает сценарий, и вы можете использовать событие onkeypress, чтобы увидеть значение нажатия клавиши.

Кнопка отправки также будет иметь событие javascript для поиска min string length, иначе дайте warning и не отправьте форму.

+0

Это правда, но вы также должны иметь валидацию на заднем конце. Люди злы, и JS можно манипулировать. –

+1

очень и очень верно. Но поскольку его заголовок использует метод 'GET' для имени пользователя, я решил, что безопасность не является главным приоритетом. – bluepinto

+0

О, хватит! Я пропустил это! –

0

Как уже указывалось ранее, для этого вам следует использовать регулярные выражения.

Попробуйте выполнить следующую инструкцию if (разрешает a-z, цифры, символы подчеркивания и дефисы). Он также проверяет, что длина составляет не менее 3-х символов:

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

Подробнее о preg_match() here

+0

Ох смотреть не работает тоже! https://regex101.com/r/tE1oS2/3 –

+0

@RachelGallen - Вы заметили восклицательный знак '!' перед 'preg_match()'? –

+0

, если он не найдет матч в первую очередь, ну его не будет иметь никакого значения! - он говорит, что нет совпадения –

Смежные вопросы