2011-02-02 4 views
0

Я использую эту строку, чтобы проверить поле даты в дд/мм/гггг «и» формат дд-мм-гггг:Дата ошибки проверки Неизвестный модификатор

'/^(0?[1-9]|[12][0-9]|3[01])[\/\.- ](0?[1-9]|1[0-2])[\/\.- ](19|20)\d{2}$/' 

, но я получаю эту ошибку

Предупреждение: preg_match() [function.preg-match]: Неизвестный модификатор '\' в /var/www/...fields_lib.php в строке 102

Имейте в виду, что указанная строка вводится в Интернете приложение необязательное поле формы проверки без какого-либо делиметра, потому что я думаю, что форма встраивает сами разделители. Для других типов проверки, таких как целочисленные и десятичные числа, мне пришлось удалить метрики для проверки для работы над этой конкретной формой.

Любые идеи?

Спасибо

ответ

1

Я не получаю эту ошибку,. Вместо этого я получаю„диапазон из строя“ошибка, по причине @CanSpice дал.Чтобы получить другую ошибку, я должен удалить первую обратную косую черту в классе символов ([/\.- ] вместо [\/\.- ]). Затем он интерпретирует / как разделитель регулярных выражений и ожидает, что следующий символ будет модификатор (как i для нечувствительна к регистру или m для многострочного).

Итак, у вас есть две проблемы: - рассматривается как оператор диапазона, а / рассматривается как разделитель регулярных выражений. Вы можете справиться с обеими проблемами, избегая оскорбительных символов с обратными косыми чертами (т. Е. [\/.\- ]), но каждая проблема имеет более элегантное решение. Если вы переместите - в первую или последнюю позицию, где он не может сформировать диапазон, он обрабатывается как литерал -. Что касается /, вы можете использовать что-то еще для разделителя регулярных выражений. Например:

'~^(0?[1-9]|[12][0-9]|3[01])[/. -](0?[1-9]|1[0-2])[/. -](19|20)\d{2}$~' 

FYI, то . не нужно экранировать вообще. В классах символов большинство метасимволов регулярных выражений теряют свои особые значения. Вы только что столкнулись с двумя особыми случаями. : -/

+0

С строкой, которую вы опубликовали, теперь она работает, и она проверяет поле. Большое спасибо. – Mkgl

2

Вам не нужен обратный слэш в символьных классах, поэтому ваше регулярное выражение следует читать (частично) [/. -]. Также отмечу, что пространство и тир переключили пространство, потому что [.- ] будет интерпретироваться как «любой символ между . и

Смежные вопросы