Форум программистов, компьютерный форум, киберфорум
Наши страницы
N1x0n
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Перевод систем счисления HTML+PHP

Запись от N1x0n размещена 11.06.2018 в 23:00

Была задача написать перевод систем счисления в виде клиент-серверного приложения.
Для PHP была использована стандартная математическая функция base_convert.
Подробнее, кому интересно: http://php.net/manual/ru/function.base-convert.php.
3 поля: число для перевода, исходная система и конечная.
И код выглядит так, ничего сложного.
PHP
1
2
3
4
if ($input != null and $output != null and $number != null)
{ 
echo "Ответ:".base_convert($number,$input,$output); 
}
Но защиту от неверно введённый данных никто не отменял, можно забить switch от 0 до 9, потом много else, примерно так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php 
function Validate2($number)
{ 
for($i = 0; $i < count($number);$i++)
{ 
switch ($number[$i])
{ 
case 0: 
continue; 
case 1: 
continue; 
default: 
return false; 
} 
} 
return true; 
} 
function ValidateNumber($number)
{ 
for($i = 0; $i < count($number);$i++)
{ 
switch ($number[$i])
{ 
case 0: 
continue; 
case 1: 
continue; 
case 2: 
continue; 
case 3: 
continue; 
case 4: 
continue; 
case 5: 
continue; 
case 6: 
continue; 
case 7: 
continue; 
case 8: 
continue; 
case 9: 
continue; 
default: 
return false; 
} 
} 
return true; 
} 
$input = $_POST['input']; 
$output = $_POST['output']; 
$number = $_POST['number']; 
if ($input != null and $output != null and $number != null)
{ 
if($input == 2 and Validate2($number))
{ 
echo "Ответ:".base_convert($number,$input,$output); 
}else if($input == 2 and !Validate2($number))
{ 
echo "Число введено не в двоичной системе!"; 
} 
if($input == 8 or $input == 10 or $input == 16)
{ 
if($input == 16)
{ 
echo "Ответ:".base_convert($number,$input,$output); 
} else 
{ 
if(ValidateNumber($number))
{ 
echo "Ответ:".base_convert($number,$input,$output); 
} else 
{ 
echo "Неверно введено число!"; 
} 
} 
 
}else
{ 
echo "Система счисления не опознана!"; 
} 
} 
?>
Всё хорошо, но не для всех систем счисления(не для 16-й):

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?php 
function Valid2($num) 
{ 
for ($i = 0; $i < mb_strlen($num); $i++) 
{ 
switch (mb_substr($num, $i, 1)) 
{ 
case '0': 
break; 
case '1': 
break; 
default: 
return false; 
} 
} 
return true; 
} 
 
function Valid16($num) 
{ 
for ($i = 0; $i < mb_strlen($num); $i++) 
{ 
switch (mb_substr($num, $i, 1)) 
{ 
case '0': 
break; 
case '1': 
break; 
case '2': 
break; 
case '3': 
break; 
case '4': 
break; 
case '5': 
break; 
case '6': 
break; 
case '7': 
break; 
case '8': 
break; 
case '9': 
break; 
case 'A': 
break; 
case 'B': 
break; 
case 'C': 
break; 
case 'D': 
break; 
case 'E': 
break; 
case 'F': 
break; 
default: 
return false; 
} 
} 
return true; 
} 
function ValidNum($num)
{ 
for ($i = 0; $i < mb_strlen($num); $i++) 
{ 
switch (mb_substr($num, $i, 1)) 
{ 
case '0': 
break; 
case '1': 
break; 
case '2': 
break; 
case '3': 
break; 
case '4': 
break; 
case '5': 
break; 
case '6': 
break; 
case '7': 
break; 
case '8': 
break; 
case '9': 
break; 
default: 
return false; 
} 
} 
return true; 
} 
?> 
<html> 
<head> 
<meta charset="UTF-8"> 
</head> 
<?php 
$input = $_POST['input']; 
$output = $_POST['output']; 
$number = $_POST['number']; 
if ($input != null and $output != null and $number != null) 
{ 
if ($input == 2 or $input == 8 or $input == 10) 
{ 
if (ValidNum($number))
 { 
if ($input == 2) 
{
if (Valid2($number)) 
{ 
echo "<h3>Ответ:" . base_convert($number, $input, $output)."</h3>"; 
} else 
{ 
echo "<h3 style='color: red'>Число не в двоичной системе счисления!<br>Разрешены только цифры: 1,0</h3>"; 
} 
} 
if ($input == 8 or $input == 10) 
{ 
echo "<h3>Ответ:" . base_convert($number, $input, $output)."</h3>"; 
} 
} else 
{ 
echo "<h3 style='color: red'>Число не распознано!<br>Разрешены только цифры!</h3>"; 
} 
} 
if ($input == 16) 
{ 
if (Valid16($number)) 
{ 
echo "<h3>Ответ:" . base_convert($number, $input, $output)."</h3>"; 
} else 
{ 
echo "<h3 style='color: red'>Число не в шестнадцетиричной системе счисления!<br>Разрешены цифры и только буквы: A,B,C,D,E,F</h3>"; 
} 
} 
} 
?>
Всё в принципе работает и проверяет, но это не то, что хотелось.

Берём preg_match, подробнее: http://php.net/manual/ru/function.preg-match.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php 
$input = $_POST['input']; 
$output = $_POST['output']; 
$number = $_POST['number']; 
if ($input != null and $output != null and $number != null) 
{ 
if ($input == 2 or $input == 8 or $input == 10) 
{ 
if (preg_match("|^[\d]+$|",$number)) 
{ 
if ($input == 2) 
{ 
if (preg_match("/^[0-1]+$/",$number)) 
{ 
echo "<h3>Ответ:" . base_convert($number, $input, $output)."</h3>"; 
} 
else 
{ 
echo "<h3 style='color: red'>Число не в двоичной системе счисления!<br>Разрешены только цифры: 1,0</h3>"; 
} 
} 
if ($input == 8 or $input == 10) 
{ 
echo "<h3>Ответ:" . base_convert($number, $input, $output)."</h3>"; 
} 
} 
else 
{ 
echo "<h3 style='color: red'>Число не распознано!<br>Разрешены только цифры!</h3>"; 
} 
} 
if ($input == 16) 
{ 
if (preg_match("/^[0-9A-F]+$/",$number)) 
{ 
echo "<h3>Ответ:" . base_convert($number, $input, $output)."</h3>"; 
} 
else 
{ 
echo "<h3 style='color: red'>Число не в шестнадцетиричной системе счисления!<br>Разрешены цифры и только буквы: A,B,C,D,E,F</h3>"; 
} 
} 
} 
?>
Миниатюры
Нажмите на изображение для увеличения
Название: 2018-06-11_22-59-46.png
Просмотров: 216
Размер:	366.9 Кб
ID:	4851  
Размещено в Без категории
Просмотров 249 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru