Skip to content

Regle Cheat Sheet

Quick reference for common Regle patterns and usage scenarios.

Basic Setup

ts
import { 
useRegle
} from '@regle/core'
import {
required
,
email
,
minLength
} from '@regle/rules'
const {
r$
} =
useRegle
(
{
name
: '',
email
: '' },
{
name
: {
required
,
minLength
:
minLength
(2) },
email
: {
required
,
email
}
} )

Essential Properties

PropertyDescriptionExample
r$.$valueForm data (reactive)r$.$value.email
r$.$correctForm is dirty and valid<button :disabled="!r$.$correct">
r$.$invalidForm is invalidv-if="r$.$invalid"
r$.$errorsAll error messagesr$.$errors.email
r$.x.$errorField has errorsv-if="r$.email.$error"
r$.x.$correctField is dirty and validv-if="r$.email.$correct"
r$.x.$dirtyField was touchedv-if="r$.email.$dirty"
r$.$validate()Validate formawait r$.$validate()
r$.$reset()Reset formr$.$reset()

Common Rules

ts
import {
useRegle
} from '@regle/core';
const
state
=
ref
<
FormState
>({})
const {
r$
} =
useRegle
(
state
, {
// Basic validation
name
: {
required
,
minLength
:
minLength
(2) },
email
: {
required
,
email
},
age
: {
required
,
numeric
,
between
:
between
(18, 99) },
// String validation
username
: {
required
,
alphaNum
,
minLength
:
minLength
(3) },
website
: {
url
},
description
: {
maxLength
:
maxLength
(500) },
// Custom patterns
phone
: {
regex
:
regex
(/^\+?[\d\s-()]+$/) },
// Password confirmation
password
: {
required
,
minLength
:
minLength
(8) },
confirmPassword
: {
required
,
sameAs
:
sameAs
(() =>
state
.
value
.
password
)
} })

Field Patterns

Basic Field with Error Display

vue
<template>
  <div>
    <input v-model="r$.$value.email" type="email" />
    <span v-for="error of r$.email.$errors" class="error">
      {{ error }}
    </span>
  </div>
</template>

Field with Visual States

vue
<template>
  <input 
    v-model="r$.$value.email"
    :class="{
      'error': r$.email.$error,
      'correct': r$.email.$correct,
    }"
  />
</template>

Optional Field with Conditional Validation

ts
import {
inferRules
} from '@regle/core';
import {
requiredIf
,
minLength
,
regex
} from '@regle/rules';
const
state
=
ref
({
phone
: ''});
const
rules
= computed(() =>
inferRules
(
state
, {
phone
: {
// Only required if form have no email
required
:
requiredIf
(() => !r$.$value.email)
minLength
:
minLength
(10),
regex
:
regex
(/^\+?[\d\s-()]+$/)
} }))

Custom Error Messages

ts
import { 
withMessage
} from '@regle/rules'
const {
r$
} =
useRegle
({
email
: '',
password
: ''}, {
email
: {
required
:
withMessage
(required, 'Email is required'),
email
:
withMessage
(email, 'Please enter a valid email address')
},
password
: {
minLength
:
withMessage
(
minLength(8), ({
$params
: [
min
] }) => `Password must be at least ${
min
} characters`
) } })

Form Submission

ts
function 
handleSubmit
() {
// Validate entire form const {
valid
,
data
} = await
r$
.
$validate
()
if (!
valid
) {
console
.
log
('Form has errors')
return } // Submit data try { await submitForm(
data
)
r$
.
$reset
() // Reset form after success
} catch (
error
) {
// Handle submission error } }

Collections (Arrays)

ts
import {
useRegle
} from '@regle/core';
const {
r$
} =
useRegle
(
{
users
: [{
name
: '',
email
: '' }] },
{
users
: {
$each
: {
name
: {
required
},
email
: {
required
,
email
}
} } } ) // Access array validation
r$
.
users
.
$each
[0].
name
.
$error

Nested Objects

ts
import {
useRegle
} from '@regle/core';
const {
r$
} =
useRegle
(
{
user
: {
profile
: {
name
: '',
bio
: '' },
contact
: {
email
: '',
phone
: '' }
} }, {
user
: {
profile
: {
name
: {
required
},
bio
: {
maxLength
:
maxLength
(200) }
},
contact
: {
email
: {
required
,
email
},
phone
: {
required
}
} } } ) // Access nested validation
r$
.
user
.
profile
.
name
.
$error

Global Configuration

ts
import { 
defineRegleConfig
} from '@regle/core';
import {
withMessage
,
required
,
minLength
} from '@regle/rules';
// Set up global defaults const {
useRegle
:
useCustomRegle
} =
defineRegleConfig
({
rules
: () => ({
required
:
withMessage
(
required
, 'You need to provide a value'),
minLength
:
withMessage
(
minLength
, ({
$value
,
$params
: [
max
] }) => {
return `Minimum length is ${
max
}. Current length: ${
$value
?.
length
}`;
}) }),
modifiers
: {
rewardEarly
: true,
} })

Schema Integration (Zod)

ts
import { 
z
} from 'zod'
import {
useRegleSchema
} from '@regle/schemas'
const
schema
=
z
.
object
({
name
:
z
.
string
().
min
(2),
email
:
z
.
string
().
email
(),
age
:
z
.
number
().
min
(18)
}) const {
r$
} =
useRegleSchema
({
name
: '',
email
: '',
age
: 0
},
schema
)

TypeScript Errors?

ts
import { 
inferRules
} from '@regle/core';
import {
required
} from '@regle/rules';
const
state
=
ref
({
name
: ''});
// ✅ Use inferRules for better type inference const
rules
=
computed
(() => {
return
inferRules
(
state
, {
name
: {
required
}
}) })

Released under the MIT License. Logo by Johannes Lacourly