Проверка поля даты предварительного совпадения - PullRequest
1 голос
/ 15 декабря 2009

Я пытаюсь «проверить» поле даты. Я хочу разрешить только цифры и символы - *. 1001 *

 $born_date=$_POST['date'];
 $goodchars = array("1","2","3","4","5","6","7","8","9","0","-");
 $char_re_good = '/['.preg_quote(join('', $goodchars), '/').']/';
       if (!(preg_match($char_re_good, $born_date))) {
            echo "not ok, contain INVALID chars"
       }else{
            echo "ok, contain valid chars"
       }

Если я попытаюсь найти «1960», тогда ОК. Если я пытаюсь найти "asdfg", то не в порядке. Но если я ищу "1960 /", то вывод в порядке. Я не понимаю почему.

Не могли бы вы помочь мне изменить, чтобы проверить, заполняют ли поля только символы "0-9" и "-".

Спасибо

Ответы [ 3 ]

7 голосов
/ 15 декабря 2009

вам нужно "привязать" ваше выражение, то есть вставить начало строки ^ и конец строки $ markers.

 preg_match('/^[0-9-]+$/', $born_date);

однако preg_match не является способом проверки дат. Например, выше будет принимать "99999999" и т. Д.

5 голосов
/ 15 декабря 2009

регулярное выражение user187291 будет соответствовать только символам даты, что вам и нужно. Быстрый способ проверить дату - попытаться преобразовать ее в метку времени с помощью strtotime():

if (strtotime($date_str)!==false) {
  // The date is valid.
}
0 голосов
/ 15 декабря 2009
$char_re_good = "/^[0-9-]+$/";

Дай попробовать

...