Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сократить (упростить) код
 
 автор: Yuriev   (10.06.2009 в 11:16)   письмо автору
 
 

Уважаемые господа программисты!
Посоветуйте как упростить этот код.

Имеем условия:
Длина переменной от 1 до +n
Если длина переменной = 1, то могут быть только цифры от 0 до 9
Если длина переменной > 1, то могут быть только цифры от 1 до 9
В переменной цифры не должны повторяться

Вот что у меня получилось:
function f_check($val, $n) { 
   $len = strlen($val); 
   if (!$len) return 'empty'; 
   if ($len > $n) return 'long'; 
   if (ereg("[^0-9]", $val)) return 'not digit'; 
   if ($len > 1) { 
      if (ereg("0", $val)) return 'have zero'; 
      for ($i = 0; $i < $len; $i++) { 
         for ($j = $i + 1; $j < $len; $j++) { 
            if ($val[$i] == $val[$j]) return 'repeat digit '.$val[$i]; 
         } 
      } 
   } 
   return 'all right'; 
}

  Ответить  
 
 автор: sim5   (10.06.2009 в 12:14)   письмо автору
 
   для: Yuriev   (10.06.2009 в 11:16)
 

<?
$n 
"1043";
if (
ctype_digit($n)) {
  if (
strlen($n) == 1) echo "Number check type 1";
  if (
strlen($n) > && preg_match("/^[1-9]+$/"$n)) echo "Number check type 2";
} else  echo 
"Not number";

  Ответить  
 
 автор: GeorgeIV   (10.06.2009 в 12:21)   письмо автору
 
   для: sim5   (10.06.2009 в 12:14)
 

а где анализ на повторяющиеся цифры?
и насколько я понимаю, длина числа не может быть больше 9 знаков, иначе повторения неизбежны

  Ответить  
 
 автор: sim5   (10.06.2009 в 12:25)   письмо автору
 
   для: GeorgeIV   (10.06.2009 в 12:21)
 

Вопа.... вот это я упустил ) Ну тут строку можно проверить как массив на повторяющиеся значения, все проще, чем в цикле сравнивать.
<?
$n 
136599;
if (
ctype_digit((string)$n)) {
  if (
strlen($n) == 1) echo "Number check type 1";
  if (
strlen($n) > && preg_match("/^[1-9]+$/"$n)) {
    
$n count_chars($n1);
    if (
max($n) < 2) echo "Number check type 2";
  }
} else  echo 
"Not number";
?>

А вообще зачем тут рег. выражения:
<?
function checkDigit($n) {
  if (
ctype_digit((string)$n)) {
    
$n count_chars($n1);
    if (
count($n) > && array_key_exists(48$n) ||  max($n) > 1) return "Not check";
  } else return 
"Not number";
}
echo 
checkDigit(0);

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования