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

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

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

 

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

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

тема: preg_match старабывает через раз
 
 автор: x0pek   (31.05.2012 в 15:38)   письмо автору
 
 

день добрый всем!
функция preg_match срабатывает в одном и том же скрипте не всегда.

я проверяю несколько строк на соответствие требованиям.
1. проверяю текст на содержание html-тегов.
if(!preg_match('/<([a-z]+)([^>]+)*(?:>(.*)<\/\1>|\s+\/>)/', strtolower($fieldValue)))
{# всё, кроме html-тегов
echo "тегов нет";
}
работает.
2. хочу проверить строку на наличие в ней только букв и цифр (в идеале ещё точка, дефис и подчеркивание)
писал так:
if(!preg_match('/\w/', $fieldValue))
и так:
if(!preg_match('/[a-zA-Z0-9]/', $fieldValue))
и так
if(!preg_match('/[a-Z0-9]/', $fieldValue))

и разными другими выражениями, что в сети нашел.
результат один: НЕ РАБОТАЕТ (ни с отрицанием, ни без)

запускаю на сервере, не локально. могу понять, если б не работало вообще... а так...
надеюсь, кто-нибудь сможет помочь!
заранее спасибо!

php: 5.2.12
система FreeBSD 7.3 на мастерхосте

  Ответить  
 
 автор: Sfinks   (01.06.2012 в 11:15)   письмо автору
 
   для: x0pek   (31.05.2012 в 15:38)
 

if(!preg_match('/[a-zA-Z0-9]/', $fieldValue)) должно быть true или false?

По вырванному куску ниче не понятно, но будем посмотреть....

Допустим должно быть так: если(тру) "не только буквы" иначе "только буквы".

Строка "Masha+Vasya=L".

Проверяем на соответствие [a-zA-Z0-9]: "M" подходит под шаблон. Значит preg_match('/[a-zA-Z0-9]/', $fieldValue) == 1, значит !preg_match('/[a-zA-Z0-9]/', $fieldValue) == false, значит результат "только буквы", что не верно.

Значит не верный шаблон, а не "preg_match старабывает через раз"!

Как исправить?
Сейчас наш шаблон ищет любую букву или цифру. А нужно чтоб искал либо любую не букву и не цифру (/[^a-zA-Z0-9]/) либо только буквы и цифры во всей строке от начала до конца (/^[a-zA-Z0-9]+$/)

Тогда проверка
if( preg_match('/[^a-zA-Z0-9]/',$fieldValue) ) "не только буквы" иначе "только буквы".
Найдет "+", который подходит под условия поиска и preg_match() вернет 1 и выведет "не только буквы", что верно

А проверка
if( ! preg_match('/^[a-zA-Z0-9]+$/',$fieldValue) ) "не только буквы" иначе "только буквы".
Наоборот найдет "+", который НЕ подходит под условия поиска и preg_match() вернет 0, соответственно !preg_match() будет тру, что также выведет "не только буквы", что снова верно.

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

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