Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Нужна функция проверки строковой переменной на Php (https://forum.antichat.xyz/showthread.php?t=55279)

-=lebed=- 08.12.2007 01:38

Нужна функция проверки строковой переменной на Php
 
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

PHP код:

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;



Helios 08.12.2007 23:44

PHP код:


function check($str)
{
  return 
preg_match('/^([0-9]{1,8}])$|^([a-z]{1,6})$|^([A-Z]{1,6})$/'$str);


Регулярки те же, но preg_match работает быстрее

Macro 08.12.2007 23:49

Цитата:

Сообщение от Helios
PHP код:


function check($str)
{
  return 
preg_match('/^([0-9]{1,8}])$|^([a-z]{1,6})$|^([A-Z]{1,6})$/'$str);


Регулярки те же, но preg_match работает быстрее

Лучше так

PHP код:


function check($str)
{
if(
preg_match('/^({[0-9]{1,8}}|{[a-z]{1,6}}|{[A-Z]{1,6}})$/'$str);)
 { return 
false;}
else {return 
true;}



Helios 09.12.2007 00:38

Цитата:

Сообщение от Macro
Лучше так

PHP код:


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}}
Неверное использование фигурных скобок
Цитата:

Сообщение от Спецификации PCRE
{
start min/max quantifier

}
end min/max quantifier

В третьих:
Код:

if (preg_match(...) {return true;} else {return false;})
Лишнее условие, а условные переходы являются самой медленной частью в любой программе
Цитата:

Сообщение от php documentation
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: зато идея "вынести за скобки" ^ и $ - как раз в тему+)

Macro 09.12.2007 01:38

Ты прав,я прокололся. Но твоя функция работает неверно.Вот так работает правильно:
PHP код:

function check($str

return 
preg_match('/(^[0-9]{1,8}$)|(^[a-z]{1,6}$)|(^[A-Z]{1,6}$)/',$str)>0?false:true;
 } 


Helios 09.12.2007 01:49

Прочитай цитату из документации пхп в моем предыдущем посте, там ясно написано, что preg_match может возвращать только два значения: 0 или 1, а они в php равносильны false или true соответственно.

Поэтому проверка
Код:

>0?false:true
излишня

Macro 09.12.2007 10:50

Цитата:

Сообщение от Helios
Прочитай цитату из документации пхп в моем предыдущем посте, там ясно написано, что preg_match может возвращать только два значения: 0 или 1, а они в php равносильны false или true соответственно.

Поэтому проверка
Код:

>0?false:true
излишня

Нет, не излишняя ибо в случае не нахождения совпадений ппо твоей функции она выкинет 0, а эта фуннкция должна наоборот выкинуть 1.

Digimortal 09.12.2007 13:11

Цитата:

Сообщение от Macro
Нет, не излишняя ибо в случае не нахождения совпадений ппо твоей функции она выкинет 0, а эта фуннкция должна наоборот выкинуть 1.

тогда все равно можно обойтись без проверки.. )
Цитата:

return !preg_match('/(^[0-9]{1,8}$)|(^[a-z]{1,6}$)|(^[A-Z]{1,6}$)/',$str);

nerezus 09.12.2007 14:54

Цитата:

if(preg_match('/^({[0-9]{1,8}}|{[a-z]{1,6}}|{[A-Z]{1,6}})$/', $str);)
{ return false;}
else {return true;}
ппц ))))
а ?: или приведение типов (bool) заюзать? )


Время: 12:46