Correctly determine if date string is a valid date in that format

前端 未结 16 2438
名媛妹妹
名媛妹妹 2020-11-22 17:02

I\'m receiving a date string from an API, and it is formatted as yyyy-mm-dd.

I am currently using a regex to validate the string format, which works ok,

16条回答
  •  耶瑟儿~
    2020-11-22 18:05

    I have this thing that, even with PHP, I like to find functional solutions. So, for example, the answer given by @migli is really a good one, highly flexible and elegant.

    But it has a problem: what if you need to validate a lot of DateTime strings with the same format? You would have to repeat the format all over the place, what goes against the DRY principle. We could put the format in a constant, but still, we would have to pass the constant as an argument to every function call.

    But fear no more! We can use currying to our rescue! PHP doesn't make this task pleasant, but it's still possible to implement currying with PHP:

    format($format) === $dateStr;
        };
    }
    

    So, what we just did? Basically we wrapped the function body in an anonymous and returned such function instead. We can call the validation function like this:

    validateDateTime('Y-m-d H:i:s')('2017-02-06 17:07:11'); // true
    

    Yeah, not a big difference... but the real power comes from the partially applied function, made possible by currying:

    // Get a partially applied function
    $validate = validateDateTime('Y-m-d H:i:s');
    
    // Now you can use it everywhere, without repeating the format!
    $validate('2017-02-06 17:09:31'); // true
    $validate('1999-03-31 07:07:07'); // true
    $validate('13-2-4 3:2:45'); // false
    

    Functional programming FTW!

提交回复
热议问题