#1 08.06.09 16:27
[PHP] ereg() и регулярные выражения
Задача такова - в текстовое поле вводится матрица вещественных чисел, числа в строке разделены запятыми, строки разделены точкой с запятой, изображение ограничено скобками. Необходимо проверить введенную строку на правильность.
Т.е., валидная матрица (1.1,1.2,-1.3;2.1,2.2,2.3;3.1,-3.2,3.3)
Поскольку это дело я решил писать на PHP, то работает это примерно в таком виде
Код: PHP:
<?php function checkInput($string) { $pattern="^[-0-9\.\,\;\(\)]+$" // пока так :) if (!ereg($pattern,$string)) return 1; return 0; } ?>
Т.е. имеющаяся фгня проверяет на наличие недопустимых символов, но тут какбэ важен формат.
В общем, если кто чего поможет - буду очень признателен. А пока сам себе моск понасилую:
http://ru.php.net/function.ereg
http://www.regular-expressions.info/floatingpoint.html
Исправлено MakcyD (08.06.09 17:32)
Offline
#3 08.06.09 18:56
Re: [PHP] ereg() и регулярные выражения
MakcyD написал(а):
1.1,1.2,-1.3;2.1,2.2,2.3;3.1,-3.2,3.3
Не вполне понял задание, но ход мысли примерно должен быть такой:
\d+\.\d+ -это одна или больше цифр, потом точка, и еще одна или больше цифр
\d+\.\d+, -должны заканчиваться на запятую
(\d+\.\d+,)+ -эта группа должна встречатся не меньше одного раза
\d+\.\d+; -это у которых в конце ;
((\d+\.\d+,)+\d+\.\d+;)+ -группа ",,;", которая должна встречатся от одного раза и больше
Offline
#4 08.06.09 18:58
Re: [PHP] ereg() и регулярные выражения
еще минус забыл
-? -вопрос значит совпадение один раз или нет вообще
((-?\d+\.\d+,)+-?\d+\.\d+;)+
Offline
#5 10.06.09 15:06
Re: [PHP] ereg() и регулярные выражения
Offline
#6 11.06.09 09:49
Re: [PHP] ereg() и регулярные выражения
Код: php:
$subject = "aaa.bbb aaaXbbb aaa%bbb"; $pattern = '/aaa(.)bbb/'; preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); echo "В тексте ".$subject."<pre>точка (.) - означает любой символ\n"; print_r( $matches); echo "</pre></br></br>"; $pattern = '/aaa(\.)bbb/'; preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); echo "<pre>(\.) Экранированная точка находит только точку \n"; print_r( $matches); echo "</pre>";
результат
Код::
В тексте aaa.bbb aaaXbbb aaa%bbb
точка (.) - означает любой символ
Array
(
[0] => Array
(
[0] => Array
(
[0] => aaa.bbb
[1] => 0
)
[1] => Array
(
[0] => aaaXbbb
[1] => 8
)
[2] => Array
(
[0] => aaa%bbb
[1] => 16
)
)
[1] => Array
(
[0] => Array
(
[0] => .
[1] => 3
)
[1] => Array
(
[0] => X
[1] => 11
)
[2] => Array
(
[0] => %
[1] => 19
)
)
)
(\.) Экранированная точка находит только точку
Array
(
[0] => Array
(
[0] => Array
(
[0] => aaa.bbb
[1] => 0
)
)
[1] => Array
(
[0] => Array
(
[0] => .
[1] => 3
)
)
)Исправлено drug_detei (11.06.09 09:56)
Offline

