Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2015, 21:43   #1
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию Как убрать лишние символы из input?

Доброго времени суток.
Прошу помощи в решении следующей задачи:
Есть input + jquery + php (header). Т.е. вывожу зеленую галку, если в php обработчике не найдено ошибок, и красный крест, если что-то не нравится. Но элементарная проверка на количество символов дает сбой (н-р: если нажать 4 раза ESC, то скрипт не возвращает ошибку).
Как можно пофиксить?
Код:
		//////////////////////////////////////////////////////////////////
		case 'login':
		//////////////////////////////////////////////////////////////////
			$error = true;
			// Проверка на количество символов
			if (strlen($value) < $_LOGIN_MIN_SYMBOLS || strlen($value) > $_LOGIN_MAX_SYMBOLS)
			{
				$_ERROR_MSG .= 'В поле "Логин" может быть от '.$_LOGIN_MIN_SYMBOLS.' до '.$_LOGIN_MAX_SYMBOLS.' символов.';
				break;
			}

			// Если опция включена, то в логине обязательно должнен быть символ верхнего регистра
			if ($_LOGIN_HIGH_REGISTER)
			{
				if(!preg_match('~[A-Z]~', $value))
				{
					$_ERROR_MSG .= 'В поле "Логин" должна быть хоть одна большая буква.|';
					break;
				}
			}
		
			// Проверяем, чтобы в строке были символы
			if(!preg_match('~[a-zA-Z]~', $value))
			{
				$_ERROR_MSG .= 'Поле "Логин" не может содержать только цифры.|';
				break;
			}

			// Проверяем, чтобы первый символ был буквой
			if ($value[0] < 'A' || $value[0] > 'z')
			{
				$_ERROR_MSG .= 'Логин может начинаться только с буквы.|';
				break;
			}

			// Ищем, есть ли такой логин в БД
			$query = 'SELECT * FROM `users` WHERE `login` = "'.$value.'";';
			$result = @mysql_query($query, $msconn);
			if (($row = @mysql_fetch_array($result)))
			{
				$_ERROR_MSG .= 'Такой логин уже существует.|';
				break;
			}

			$error = false;
			break;
Заранее спасибо!

p.s.: в других случаях ещё и русские буквы есть.
Tahoma вне форума Ответить с цитированием
Старый 21.06.2015, 15:42   #2
Mortimoro
Форумчанин
 
Регистрация: 03.12.2010
Сообщений: 334
По умолчанию

Сперва ты проверяешь, есть ли буквы в строке, а затем проверяешь, является ли первый символ буквой - если второе условие соблюдается, тогда первое соблюдается всегда и не имеет смысла.

Чтобы спецсимволы не портили сказку, регулярное выражение должно быть жестким. Например: /^\w+$/ или /^[A-Za-z0-9]+$/
Если проверка на наличие только допустимых символов прошла, тогда уже можно проверять длину строки, наличие заглавных букв и т.п. Кстати, длину строки и наличие заглавных литер можно проверять прямо в первой регулярке, например: /^[A-Za-z0-9]{3,8}$/ - строка содержит символы алфавита и цифры, и ее длина от 3 до 8 символов.
Mortimoro вне форума Ответить с цитированием
Старый 21.06.2015, 22:24   #3
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Цитата:
Сообщение от Mortimoro Посмотреть сообщение
Сперва ты проверяешь, есть ли буквы в строке, а затем проверяешь, является ли первый символ буквой - если второе условие соблюдается, тогда первое соблюдается всегда и не имеет смысла.
Спасибо за ответ.
В начале проверяю на буквы в строке, если нет, то до проверки на равенство первого символа к букве и не доходит.
Tahoma вне форума Ответить с цитированием
Старый 23.06.2015, 19:08   #4
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Ещё раз благодарю Mortimoro, т.к. его выражения натолкнули меня на сайт: http://html5pattern.com/. Полезно очень.
Вот что получилось:
Код:
		//////////////////////////////////////////////////////////////////
		case 'login':
		//////////////////////////////////////////////////////////////////
			$error = true;
			// Проверка на количество символов
			if (strlen($value) < $_LOGIN_MIN_SYMBOLS || strlen($value) > $_LOGIN_MAX_SYMBOLS)
			{
				$_ERROR_MSG .= 'В поле "Логин" может быть от '.$_LOGIN_MIN_SYMBOLS.' до '.$_LOGIN_MAX_SYMBOLS.' символов.';
				break;
			}

			// Если опция включена, то в логине обязательно должнен быть символ верхнего регистра
			if ($_LOGIN_HIGH_REGISTER)
			{
				if(!preg_match('~[A-Z]~', $value))
				{
					$_ERROR_MSG .= 'В поле "Логин" должна быть хоть одна большая буква.|';
					break;
				}
			}
		
			// Проверяем, чтобы в строка была поддерживаемого формата + символы + только буква в начале
			if(!preg_match('/^[a-zA-Z][a-zA-Z0-9$!#*-]+$/', $value))
			{
				$_ERROR_MSG .= 'Поле "Логин" не может содержать только цифры.|';
				break;
			}

			// Ищем, есть ли такой логин в БД
			$query = 'SELECT * FROM `users` WHERE `login` = "'.$value.'";';
			$result = @mysql_query($query, $msconn);
			if (($row = @mysql_fetch_array($result)))
			{
				$_ERROR_MSG .= 'Такой логин уже существует.|';
				break;
			}

			$error = false;
			break;
Только не пойму, что не так в выражении: "/^[a-zA-Z][a-zA-Z0-9$!#*-]{4,20}$/"

Последний раз редактировалось Tahoma; 23.06.2015 в 19:53.
Tahoma вне форума Ответить с цитированием
Старый 23.06.2015, 20:25   #5
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

/^[a-zA-Z][a-zA-Z0-9$!#*\-]{4,20}$/
Символ "-" в множестве - управляющий символ, надо экранировать.

[a-zA-Z] можно записать как [A-z]
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Как убрать лишние нули в вещественном типе? Ghost3 Помощь студентам 11 17.08.2013 06:02
Mask Edit, Лишние символы tarakan1983 БД в Delphi 10 11.07.2012 20:10
как убрать лишние пробелы в меню Vervolf JavaScript, Ajax 6 07.05.2012 00:34
Лишние символы вводимого текста victorshkoda Общие вопросы Delphi 13 05.01.2012 22:46
Непонятные символы. Как убрать? Kashp Microsoft Office Word 2 25.05.2011 11:09