@stikname

RegExp в php. Проверка строки на наличие нужных последовательностей?

Есть строка, состоящая из последовательностей подходящих под эту регулярку:
%u00[0-9][0-9a-zA-Z]

Например:
%u003c%u0073%u0063%u0072%u0069%u0070%u0074%u003e


Нужна регулярка, на php которая бы проверяла правильно ли написана строка.

Правильные варианты строки (по одному на строчку):
%u003c%u0073%u0063%u0072%u0069%u0070%u0074%u003e
%u003c
%u0046%u005с


Неправильные варианты строки (по одному на строчку):
asd
%a003da
%k41ad
Бла бла бла
%u003c%u0073%u0063%
%u003c%u0073ASFQ%u0063


Не знаю как правильнее выразить мысль.
  • Вопрос задан
  • 3362 просмотра
Решения вопроса 1
silentvick
@silentvick
Если принять за очевидное, что речь идет о экранированном unicode, где %u начинает код символа, после чего идет шестнадцатиричное представление, то подойдет следующая регулярка:
/^(?:%u[\dabcdef]{4})+$/i
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Melkij
@Melkij
PostgreSQL DBA
У вас в третьем позитивном тесте c - русская, а я-то думаю, чего тест валится =)

function checkStr( $sInput ) {
	$sRegexp = '~^(:?%u00[0-9][0-9a-zA-Z])++$~';
	return preg_match($sRegexp, $sInput);
	}
assert('checkStr("%u003c%u0073%u0063%u0072%u0069%u0070%u0074%u003e")');
assert('checkStr("%u003c")');
assert('checkStr("%u0046%u005c")');
assert('checkStr("asd")==false');
assert('checkStr("%a003da")==false');
assert('checkStr("%k41ad")==false');
assert('checkStr("Бла бла бла")==false');
assert('checkStr("%u003c%u0073%u0063%")==false');
assert('checkStr("%u003c%u0073ASFQ%u0063")==false');
Ответ написан
Комментировать
avalak
@avalak
/^(?:%u00[\da-z]{2})+$/
тест
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Если пустая строка не является правильным результатом, то
preg_match('/^(%u00[0-9][0-9a-zA-Z])+$/', $string);

Если является, то
preg_match('/^(%u00[0-9][0-9a-zA-Z])*$/', $string);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы