# Validation Rules and Examples 

### Validation Rules and Examples 
* **CustomerReference**: Required; 1–250 characters.
* **Title**: Required; 2–30 characters; letters, spaces, and single quotes only (`^[a-zA-Z ']+$`).
* **FirstName**: Required; 1–30 characters; letters, spaces, hyphens, and single quotes only (`^[a-zA-Z '-]+$`).
* **LastName**: Required; 2–30 characters; letters, spaces, hyphens, and single quotes only (`^[a-zA-Z '-]+$`).
* **MiddleNames**: Optional; 1–30 characters; letters, spaces, hyphens, and single quotes only (`^[a-zA-Z '-]+$`).
* **DateOfBirth**: Required; ISO-8601 date/datetime format; age must evaluate to between 18 and 120 years.
* **PhoneNumber**: Required; 10 or 11 numeric digits starting with `0` (`^0\d{9,10}$`); internal whitespace is stripped prior to matching.
* **EmailAddress**: Required; valid email format; 5–255 characters.
* **Address**: Required object (`additionalProperties: false`).
  * `PostCode`: Required; standard UK postcode format.
  * **Building Identification**: At least one of `AbodeNumber` (max 30), `BuildingName` (max 50), or `BuildingNumber` (max 12) is required (slashes and allowed symbols accepted).
  * `Address1`, `Address2`, `Address3`: Optional; 1–50 characters; alphanumeric and allowed symbols (no slashes).
  * `Town`: Optional; 1–25 characters; alphanumeric and allowed symbols (no slashes).
* **PreviousAddress**: Optional; Validation same as `Address` above.

**Example 1: Flat with building name**

```text
Flat 1/2 Test House
Test Street
Test Town
TT12 3TT
```

```json
{
  "address": {
    "postcode": "TT12 3TT",
    "abodeNumber": "Flat 1/2",
    "address1": "Test Street",
    "address2": "",
    "address3": "",
    "buildingName": "Test House",
    "buildingNumber": "",
    "town": "Test Town"
  }
}
```
**Example 2: Flat identifier only**

```text
3F
Test Street
Test Town
TT12 3TT
```

```json
{
  "address": {
    "postcode": "TT12 3TT",
    "abodeNumber": "3F",
    "address1": "Test Street",
    "address2": "",
    "address3": "",
    "buildingName": "",
    "buildingNumber": "",
    "town": "Test Town"
  }
}
```
**Example 3: Flat, building name, and street number**

```text
Flat 16 Test House
54 Test Street
Test Town
TT12 3TT
```

```json
{
  "address": {
    "postcode": "TT12 3TT",
    "abodeNumber": "Flat 16",
    "address1": "Test Street",
    "address2": "",
    "address3": "",
    "buildingName": "Test House",
    "buildingNumber": "54",
    "town": "Test Town"
  }
}
```

Version: all
