Регулярка на логин

Статус
Закрыто для дальнейших ответов.

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Привет всем!
Нужно такую регулярку (или разделить пункты на несколько регулярок):

1. В логине разрешены буквы английского ИЛИ русского алфавита (одновременно использовать оба языка нельзя), а также в обоих языках разрешены цифры
2. Логин не должен состоять из одной и той же буквы или цифры
3. Длин логина от 3 до 15 символов

Нашел в гугле несколько регулярок, объеденил их, но что-то у меня не клеятся никак русские буквы.
Пример:

if(!preg_match("/^(([a-z0-9]+)|([а-я0-9]+))$/is", $login)) echo 'Хрен те'; else echo 'Всё ок';
p.s На сервере не тестил, но на винде у меня не работает :/
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
Если бы использовал валидатор форм, было бы намного легче, а так, что то вроде такого:


Код:
$login = 'Vasya';
$regex = '/^([a-z0-9]+|[а-я0-9]+)$/is';
$length = strlen($login);

function unique_characters ($string) {
	$dictionary = array ();

	foreach (str_split($string) as $char) {
		if (!isset($dictionary[$char])) {
			$dictionary[$char] = 0;
		}
		
		$dictionary[$char] += 1;

		if ($dictionary[$char] > 1) {
			return false;
		}
	}

	return true;
}

if (
	unique_characters($login) && 
	!preg_match($regex, $login) && 
	$length >= 3 && 
	$length <= 15
) {
	echo 'ok';
}
else {
	echo 'no';
}
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
[member=Volter9], Регулярка /^([a-z0-9]+|[а-я0-9]+)$/is не работает :(

$array = array('Серёга',
'Серега',
'fox',
'f0x',
'12345',
'qwertyфокс',
'СЕРЁГА',
'ССССССС',
'сссссс',
'йййййййй',
'йцукенгшщзфывапролдячсмитьбю'
);

foreach($array as $value) {

echo $value.' => ';

if(preg_match("/^([a-z0-9]+|[а-я0-9]+)$/is", $value)) echo 'OK'; else echo 'FALSE';

echo '<br/>';

}

Букву "с" почему-то отказывается принимать :(
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 138
Код:
([a-z0-9]+|[а-я0-9]+)
А зачем ты два раза группируешь однотипное при ветвление ( | ИЛИ)?
И условие (скобки) зачем?

Код:
/^[a-zа-я0-9]+$/is
"с" какая не проходит?
Кириллическая, большая или маленькая?

Если только большая, то попробуй явно указать
Код:
/^[a-zа-яА-Я0-9]+$/is
Также стоит скармливать юникод
Код:
/^[a-zа-я0-9]+$/isu
Может проблемы со стороны сервера, бывает в некоторых версиях PHP или настройках неверно отрабатываются те или иные модификаторы.

Кстати, если мне правильно подсказывают карты ТАРО, то у тебя проблема не с "С", а с "Ё".
Код:
/^[a-zа-яеЁ0-9]+$/isu
Если бы ты чаще посещал нашу конфу, то знал бы об этой проблеме. Она также будет с украинскими спец.символами :)

А ещё, почему ты не разрешаешь тире, подчеркивание и другие?

Для написания и отладки рекомендую использовать https://regex101.com/
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
BaNru сказал(а):
В логине запрещено использовать одновременно и русские и английские буквы

BaNru сказал(а):
Кстати, если мне правильно подсказывают карты ТАРО, то у тебя проблема не с "С", а с "Ё".
У меня не проходила именно "с" и "С" (русские), пока не поставил по твоей наводке "u" (кстати, с "Ё" тоже был запор)

BaNru сказал(а):
Если бы ты чаще посещал нашу конфу, то знал бы об этой проблеме. Она также будет с украинскими спец.символами
Каюсь, что меня не было(( .лбом ап стену.
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
[member=FiRеFоX], а ты весь код проверил? Я тебе специально скинул весь листинг кода. Там не только регулярное выражение, там еще проверка на длину и на уникальные символы.
 
Статус
Закрыто для дальнейших ответов.
Верх Низ