|
|
|
| Уважаемые господа программисты!
Посоветуйте как упростить этот код.
Имеем условия:
Длина переменной от 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';
}
|
| |
|
|
|
|
|
|
|
для: Yuriev
(10.06.2009 в 11:16)
| |
<?
$n = "1043";
if (ctype_digit($n)) {
if (strlen($n) == 1) echo "Number check type 1";
if (strlen($n) > 1 && preg_match("/^[1-9]+$/", $n)) echo "Number check type 2";
} else echo "Not number";
|
| |
|
|
|
|
|
|
|
для: sim5
(10.06.2009 в 12:14)
| | а где анализ на повторяющиеся цифры?
и насколько я понимаю, длина числа не может быть больше 9 знаков, иначе повторения неизбежны | |
|
|
|
|
|
|
|
для: 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) > 1 && preg_match("/^[1-9]+$/", $n)) {
$n = count_chars($n, 1);
if (max($n) < 2) echo "Number check type 2";
}
} else echo "Not number";
?>
|
А вообще зачем тут рег. выражения:
<?
function checkDigit($n) {
if (ctype_digit((string)$n)) {
$n = count_chars($n, 1);
if (count($n) > 1 && array_key_exists(48, $n) || max($n) > 1) return "Not check";
} else return "Not number";
}
echo checkDigit(0);
|
| |
|
|
|