Portal Community

Complete Built-In Rules Reference

RuleTypeApplies ToDefault Message
requiredbooleanAll controls"This field is required"
minLengthnumbertext, textarea, password, url"Must be at least N characters"
maxLengthnumbertext, textarea, password, url"Must be no more than N characters"
minnumbernumber"Must be at least N"
maxnumbernumber"Must be no more than N"
patternstring (regex)text, textarea, email, url"Invalid format"
emailbooleanemail"Must be a valid email address"
urlbooleanurl, text"Must be a valid URL"
minDatestring (ISO date)date, datetime"Date must be on or after [date]"
maxDatestring (ISO date)date, datetime"Date must be on or before [date]"
minSelectionsnumbermultiselect, checkbox-group"Select at least N options"
maxSelectionsnumbermultiselect, checkbox-group"Select no more than N options"
minRowsnumberdata-table"At least N rows required"
maxRowsnumberdata-table"No more than N rows allowed"
fileTypesstring[]file-upload"File type not allowed"
maxFileSizeMbnumberfile-upload"File exceeds maximum size of N MB"

Custom Error Messages

Every built-in rule supports a companion *Message property to override the default error text:

{
  "id": "phone",
  "type": "text",
  "label": "Phone Number",
  "validation": {
    "required": true,
    "requiredMessage": "A phone number is required to contact you",
    "pattern": "^\\+?[0-9\\s\\-\\(\\)]{7,20}$",
    "patternMessage": "Enter a valid phone number including country code"
  }
}

required Rule

The required rule checks for empty values. What counts as "empty" depends on the control type:

Control TypeEmpty Condition
text, textarea, password, email, urlEmpty string or whitespace-only
numbernull or undefined (zero is valid)
select, radionull or undefined
multiselectEmpty array []
checkbox, switchfalse or null — use to force acknowledgement
date, datetimenull or undefined
file-uploadNo files selected
data-tableZero rows

pattern Rule

The pattern rule accepts a JavaScript regular expression string (without delimiters). The entire field value must match — equivalent to new RegExp('^' + pattern + '$').test(value):

// UK postcode
"pattern": "^[A-Z]{1,2}[0-9][0-9A-Z]?\\s?[0-9][A-Z]{2}$"

// US ZIP code (5 digit or ZIP+4)
"pattern": "^[0-9]{5}(-[0-9]{4})?$"

// IBAN (simplified — real validation should be custom)
"pattern": "^[A-Z]{2}[0-9]{2}[A-Z0-9]{11,30}$"

// No SQL injection characters (basic)
"pattern": "^[^;'\"\\\\]*$"

Date Validation with Dynamic Bounds

The minDate and maxDate rules support the special string "today" in addition to ISO date strings:

{
  "id": "effective-date",
  "type": "date",
  "label": "Effective Date",
  "validation": {
    "required": true,
    "minDate": "today",
    "minDateMessage": "Effective date cannot be in the past",
    "maxDate": "2030-12-31",
    "maxDateMessage": "Effective date must be before 2031"
  }
}