2012-04-29 5 views
1

У меня это до сих пор:preg_match проверки даты рождения

$post_dob = '19/08/1982';      
$pattern = '/^\[0-9]{2}\/\[0-9]{2}\/\[0-9]{4}\$/'; 


if(!preg_match($pattern, $post_dob)){         
    $post_dob = explode('/', $_POST[$field]); 
    $post_dob = $post_dob[2] . '-' . $post_dob[1] . '-' . $post_dob[0]; 
    return $post_dob; 
}else{ 
    return false; 
} 

Это, кажется, не ошибетесь, если я поставил 19/08/19823123 Любые идеи, что я делаю неправильно ?

+0

'/' - специальный символ, либо вы избегаете его с помощью '\ /', либо используйте другую последовательность шаблонов, например '@^[ 0-9] {2} /[email protected] '. И не избегайте последнего '' '. – g13n

ответ

1

Попробуйте

$pattern = '@^[0-9]{2}/[0-9]{2}/[0-9]{4}[email protected]'; 

Но в действительности, его гораздо сложнее, чем это. Вам придется учитывать високосные годы и месяцы, имеющие 30 дней против 31 дня и т. Д.

+0

Что обозначает @ ^ = начало строки $ = конец строки @ =? – Jimmyt1988

+0

@JamesT хорошо, если у вас слишком много '/' в вашем шаблоне, вместо того, чтобы писать регулярное выражение внутри '//', в этом случае вам придется избегать каждого '/' в вашем выражении, вы можете использовать любой другой символ , См. . – g13n

+0

Спасибо за совет високосного года. Я надеялся, что сборщик дат jquery решит это ... Это было главным образом для того, чтобы хакеры не печатали. Приветствия !!! – Jimmyt1988

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