Просмотр полной версии : Нужна функция проверки строковой переменной на Php
-=lebed=-
08.12.2007, 01:38
check($value)
if Only numeric (0-9) (1-8 символов)
or
Only loweralpha(a-z) (1-6 символов)
or
Only alpha (A-Z) (1-6 символов) -> false
else -> true
ЗЫ Вообщем ложь, если только цифры 1-8 символов или только строчные 1-6 символов или только заглавные 1-6 симоволов, в остальных случаях правда...
GreenBear
08.12.2007, 01:50
function mda($s){
if(ereg('^([0-9]{1,8})$', $s)) return false;
if(ereg('^([a-z]{1,6})$', $s)) return false;
if(ereg('^([A-Z]{1,6})$', $s)) return false;
return true;
}
function check($str)
{
return preg_match('/^([0-9]{1,8}])$|^([a-z]{1,6})$|^([A-Z]{1,6})$/', $str);
}
Регулярки те же, но preg_match работает быстрее
function check($str)
{
return preg_match('/^([0-9]{1,8}])$|^([a-z]{1,6})$|^([A-Z]{1,6})$/', $str);
}
Регулярки те же, но preg_match работает быстрее
Лучше так
function check($str)
{
if(preg_match('/^({[0-9]{1,8}}|{[a-z]{1,6}}|{[A-Z]{1,6}})$/', $str);)
{ return false;}
else {return true;}
}
Лучше так
function check($str)
{
if(preg_match('/^({[0-9]{1,8}}|{[a-z]{1,6}}|{[A-Z]{1,6}})$/', $str);)
{ return false;}
else {return true;}
}
Во первых:
({[0-9]{1,8}}
несовпадение открывающих и закрывающих скобок (фигурные и круглые)
Во вторых:
{[a-z]{1,6}}
Неверное использование фигурных скобок
{
start min/max quantifier
}
end min/max quantifier
В третьих:
if (preg_match(...) {return true;} else {return false;})
Лишнее условие, а условные переходы являются самой медленной частью в любой программе
preg_match() returns the number of times pattern matches. That will be either 0 times (no match) or 1 time because preg_match() will stop searching after the first match.
PS: зато идея "вынести за скобки" ^ и $ - как раз в тему+)
Ты прав,я прокололся. Но твоя функция работает неверно.Вот так работает правильно:
function check($str)
{
return preg_match('/(^[0-9]{1,8}$)|(^[a-z]{1,6}$)|(^[A-Z]{1,6}$)/',$str)>0?false:true;
}
Прочитай цитату из документации пхп в моем предыдущем посте, там ясно написано, что preg_match может возвращать только два значения: 0 или 1, а они в php равносильны false или true соответственно.
Поэтому проверка
>0?false:trueизлишня
Прочитай цитату из документации пхп в моем предыдущем посте, там ясно написано, что preg_match может возвращать только два значения: 0 или 1, а они в php равносильны false или true соответственно.
Поэтому проверка
>0?false:trueизлишня
Нет, не излишняя ибо в случае не нахождения совпадений ппо твоей функции она выкинет 0, а эта фуннкция должна наоборот выкинуть 1.
Digimortal
09.12.2007, 13:11
Нет, не излишняя ибо в случае не нахождения совпадений ппо твоей функции она выкинет 0, а эта фуннкция должна наоборот выкинуть 1.
тогда все равно можно обойтись без проверки.. )
return !preg_match('/(^[0-9]{1,8}$)|(^[a-z]{1,6}$)|(^[A-Z]{1,6}$)/',$str);
if(preg_match('/^({[0-9]{1,8}}|{[a-z]{1,6}}|{[A-Z]{1,6}})$/', $str);)
{ return false;}
else {return true;}
ппц ))))
а ?: или приведение типов (bool) заюзать? )
ппц ))))
а ?: или приведение типов (bool) заюзать? )
А зачем оно там нужно?
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot