|
|
|
| день добрый всем!
функция 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 на мастерхосте | |
|
|
|
|
|
|
|
для: 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() будет тру, что также выведет "не только буквы", что снова верно. | |
|
|
|