Search code examples
javascriptajv

Validate UTC date/date-time with ajv but allow empty strings


I need to validate string schema format: "date" or format: "date-time" to accept only ISO 8601 but also allow empty string "" (the "" requirement should be separately checked using the required schema).

{
   "datetime1": {
      "type": "string",
      "format": "date-time",
   }
}

However, the native ajv format parser does not allow empty string "" to pass. How do I make it allow empty string, and still validate ISO 8601?

Do I really have to write my own format checker using ajv.addFormat()? I also have the same issue for "format": "email", where I also need "" to be valid.

Note: I can't modify the schema, so I can't add defaults.


Solution

  • Lets try to use oneOf

    date_to: {
      type: 'string',
      oneOf: [
        {
          maxLength: 0
        },
        {
          format: 'date-time',
          minLength: 1
        }
      ]
    },
    

    in the first object, it will allows empty string. In the second object, it will check input based on your format