问题
In my application, server side date validations were done through IsDate which is very inconsistent in behavior. I used isValid("USdate",DateVar), that works fine with incoming dates, but when DateVar is a date time stamp it fails. Values coming in DateVar could be anything, a date, a time, a date & time or even some invalid data. If I use Date mask with isValid, that behaves like isDate and of no use. How I can accomplish this.
回答1:
All "dates" that will be arriving via a request - be they via a URL parameter, a form submission, a cookie, etc - will be strings, not dates.
What you need to do is to work out what string formats you will allow, and validate them accordingly.
EG: you might decide that yyyy-mm-dd
is OK, but you won't accept m/d/yy
. You might pass them as three separate components for y
, m
and d
. But you really oughtn't try to accept any old format, as you will need to have a validator for each format, and there's a law of diminishing returns there: people won't expect to use any format they like; they'll be expecting you to guide them. You also need to be mindful that if you ask me to type in today's date, I'd give you 4/5/2015. But to you that might represent April 5.
Given various month-length and leap-year rules, really the easiest and most reliable way to see if and input string represents a date in an acceptable format do this:
- Validate the format mask, eg: if you're accepting
yyyy-mm-dd
, then the input needs to be \d{4}-\d{2}-\d{2}. Then at least you know the string has been formed properly. - Then extract the components from the string, and attempt to create a date object with them. If it doesn't error: it's OK.
- Last: check any date boundaries within / outwith which the date needs to fall.
来源:https://stackoverflow.com/questions/30024275/server-side-validation-for-datetime-stamp