Вопрос № 96734: Здравствуйте!
У меня вопрос по регулярным выражениям. Мне надо проверить вводились числа или нет я использую if (!preg_match["0-9"]) - но это выражение только проверяет цифры 123456789, а как быть с двузначными и т.д. числами? Проверять...
Вопрос № 96.734
Здравствуйте!
У меня вопрос по регулярным выражениям. Мне надо проверить вводились числа или нет я использую if (!preg_match["0-9"]) - но это выражение только проверяет цифры 123456789, а как быть с двузначными и т.д. числами? Проверять с помощью выражения
["a-zA-Z"] или есть другой способ?
Спасибо
Отправлен: 30.07.2007, 20:08
Вопрос задал: Sky24dive (статус: Посетитель)
Всего ответов: 5 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Nexus
Здравствуйте, Sky24dive!
if (!preg_match("/([0-9]+)/", $string, $matches)) {
...
}
+ - означает одно или больше повторений
* - ноль или больше :)
Нужно чтобы не было именно чисел? Тогда вообщем-то и твоя проверка проходит, т.е. если хотя бы одна цифра есть, то условие не выполнится. А если нужно вытащить эти числа, тогда так как описал.
Ответ отправил: Nexus (статус: 9-ый класс)
Ответ отправлен: 30.07.2007, 20:15 Оценка за ответ: 5
Отвечает: Flynn
Здравствуйте, Sky24dive!
Не совсем понял что значит двузначные и т.д.
Но вообще preg_match["0-9"] - проверит входят ли цифры в то что было введено независимо сколько их, или где они, или есть ли там буквы.
Если надо чтобы было больше нескольких цифр подряд - preg_match("[0-9]{2,}") - проверит чтобы цифр было больше или равно двум. Если убрать запятую - только две цифры. Если после запятой поставить например 4 - то от 2 до 4 цифр подряд.
Но я бы вообще посоветовал для проверки вводимых данных на цуифры использовать intval (doubleval,floatval) - эти функции преобразуют все что ввел пользователь в число. И если там ничего не введено или билиберда - будет равно нулю. Зато можно с увереностью сказать что у нас в этой переменной число, а не непонятно что.
Ответ отправил: Flynn (статус: 3-ий класс)
Ответ отправлен: 30.07.2007, 20:53 Оценка за ответ: 4
Отвечает: Magister
Здравствуйте, Sky24dive!
Используйте классы выражений: для чисел это будет (d+)
Ответ отправил: Magister (статус: 3-ий класс)
Ответ отправлен: 30.07.2007, 21:42
Отвечает: Бобровский Сергей Сергеевич
Здравствуйте, Sky24dive!
Лучше в таком случае использовать функцию
is_numeric($num);
работает быстрее регулярных выражений, она вернет true даже если это строка типа string, но в ней находятся числа. Если же обязательно использовать регулярные выражения, то подойдет следующее
ereg("^[0-9]+$");
^ - означает начало строки
$ - её конец
+ - совпаданий от одного и больше
Вместо + можно использовать {1,3} - значит, совпадение от 1 до 3 раз. Или {3,} - от трёх и больее раз.
Ваше же выражение вернет true, если найдёт хотя бы одно число в строке. Кстати, одно замечание, скорее всего у тебя опечатка, аргумент функции передается не в квадратных скобках, а в круглых.
--------- Никогда не бойтесь делать то, что не умеете! Помните: Ноев Ковчег построил любитель, а Титаник - профессионал.
Отвечает: Powoditch konstantin
Здравствуйте, Sky24dive!
Первое - надо писать не if (!preg_match["0-9"]), а if (!preg_match("[0-9]", $str) !
Если Вы будете использовать if (!preg_match["0-9"]) - то это выражение будет работать ТОЛЬКО в том случае если будет осуществятся проверка однозначного числа или символа. Для того чтобы сделать корректную проверку для двух и более символов надо дописать это:
if (!preg_match("[0-9]+", $str) - работает с любым количеством символов, вместе с первым(если не так - извините за неточности)
if (!preg_match("[0-9]*", $str) - работает с любым количеством символов
Ответ отправил: Powoditch konstantin (статус: 3-ий класс)
Ответ отправлен: 31.07.2007, 18:58