Call sv_optional() to generate a validation function that indicates an input is allowed to not be present. If an sv_optional() rule sees that an input is not present, subsequent rules for that input are skipped and the input is considered valid. Otherwise, the rule simply passes. (sv_optional() will never return a validation error/message.)

By default, the definition of "is present" is based on input_provided().

Child validators (see InputValidator$add_validator()) are not affected by sv_optional() rules in parent validators; only rules in the same validator instance as the sv_optional() will be skipped.

sv_optional(test = input_provided)



A single-argument function, or single-sided formula (using . to access the value to test), that returns TRUE for success and FALSE for failure.


A function suitable for use as an InputValidator$add_rule() rule.

See also

The sv_required() function, which takes a different approach to field presence.

Other rule functions: compose_rules(), sv_between(), sv_email(), sv_equal(), sv_gte(), sv_gt(), sv_in_set(), sv_integer(), sv_lte(), sv_lt(), sv_not_equal(), sv_numeric(), sv_regex(), sv_required(), sv_url()


## Only run examples in interactive R sessions
if (interactive()) {


ui <- fluidPage(
  textInput("email", "Email")

server <- function(input, output, session) {
  # Validation rules are set in the server, start by
  # making a new instance of an `InputValidator()`
  iv <- InputValidator$new()

  # Basic usage: `sv_optional()` is often paired with
  # another `sv_*()` function; below, an email in
  # `input$email` is not required, but if present, it
  # must be valid
  iv$add_rule("email", sv_optional())
  iv$add_rule("email", sv_email())

  # Finally, `enable()` the validation rules

shinyApp(ui, server)