Files
carmanagement/docs/input_validation_plan.md
T
2026-06-11 15:35:25 -04:00

7.0 KiB

User Input Validation and Formatting Plan

Table of Contents

  1. Global Rules
  2. Field-Specific Rules
  3. Implementation Logic
  4. Formatting Functions
  5. Error Handling
  6. Processing Order
  7. Field Configuration Reference

Global Rules

Allowed Characters

All fields accept only:

  • Letters (A-Z, a-z)
  • Numbers (0-9)
  • Special characters: @, -, /
  • Spaces (where applicable)

Global Regex Pattern:

^[a-zA-Z0-9@\-\/\s]*$
Field-Specific Rules
Group 1: Title Case Fields (Uppercase First Letter, Lowercase Rest)
Fields: Name, Nationality, Street Address, City, Pick-up Location, Return Location, Country

Property	Value
Format	Uppercase first letter, lowercase rest
Max Characters	50 (Name, Nationality, City, Locations, Country) / 100 (Street Address)
Allowed Characters	Letters, spaces, - (Street Address also allows numbers and /)
Transformation	toTitleCase()
Examples:

"john doe" → "John Doe"

"MARIA" → "Maria"

"new york" → "New York"

"123 main st." → "123 Main St."

Group 2: Title Case All Words Fields
Fields: Full Address, Commercial Name, Legal Company Name

Property	Value
Format	Uppercase first letter of every word
Max Characters	200 (Full Address) / 100 (Company Names)
Allowed Characters	Letters, numbers, spaces, -, /, ,
Transformation	toTitleCaseAll()
Examples:

"123 main street, apt 4b" → "123 Main Street, Apt 4b"

"acme corporation" → "Acme Corporation"

Group 3: Lowercase Fields
Fields: Email

Property	Value
Format	All lowercase
Max Characters	100
Allowed Characters	Letters, numbers, @, ., _, %, +, -
Transformation	toLowerCase()
Validation	Must match email format
Validation Regex:

regex
^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$
Examples:

"John.Doe@Example.COM" → "john.doe@example.com"

Group 4: Uppercase Fields (Letters Only)
Fields: License Plate, VIN, CIN, Passport Number, International Permit Number, Driver License Number, License Category, ICE Number, Commercial Registry (RC)

Property	Value
Format	ALL UPPERCASE letters, numbers unchanged
Max Characters	30
Allowed Characters	Letters and numbers only
Transformation	toUpperCase()
Examples:

"abc-123" → "ABC-123"

"ab123cd" → "AB123CD"

Group 5: Car Fields
Fields: Car Mark, Car Model, Car Color

Property	Value
Format	Uppercase first letter, lowercase rest
Max Characters	30
Allowed Characters	Letters, numbers, spaces, -
Transformation	toTitleCase()
Examples:

"TOYOTA" → "Toyota"

"midnight-blue" → "Midnight-Blue"

Group 6: Preserved Format Fields
Fields: ZIP Code

Property	Value
Format	As entered (no case transformation)
Max Characters	10
Allowed Characters	Letters, numbers, -
Transformation	preserveOriginal()
Examples:

"12345" → "12345"

"SW1A 1AA" → "SW1A 1AA"

Implementation Logic
Main Processing Function
javascript
function sanitizeAndFormatInput(value, fieldType) {
    // Step 1: Remove disallowed characters
    let sanitized = removeDisallowedChars(value, fieldType);
    
    // Step 2: Trim leading/trailing whitespace
    sanitized = sanitized.trim();
    
    // Step 3: Validate format (if applicable)
    if (fieldType === 'email' && !isValidEmail(sanitized)) {
        throw new Error('Invalid email format');
    }
    
    // Step 4: Apply field-specific formatting
    let formatted = applyFormatting(sanitized, fieldType);
    
    // Step 5: Truncate to max length
    formatted = truncateToMaxLength(formatted, fieldType);
    
    return formatted;
}
Processing Order
Sanitize — Remove invalid characters

Trim — Remove leading/trailing whitespace

Validate — Check format (email, required fields)

Format — Apply case transformation

Truncate — Enforce max length

Return — Output formatted value

Formatting Functions
Function	Description	Used For
toTitleCase()	First letter uppercase, rest lowercase per word	Name, Nationality, Street Address, City, Locations, Country, Car fields
toTitleCaseAll()	First letter of every word uppercase	Full Address, Commercial Name, Legal Company Name
toLowerCase()	All characters to lowercase	Email
toUpperCase()	All letters to uppercase, numbers unchanged	License Plate, VIN, CIN, Passport, Permit, Driver License, License Category, ICE, RC
preserveOriginal()	No transformation	ZIP Code
Function Implementations
javascript
function toTitleCase(str) {
    return str.replace(/\b\w/g, char => char.toUpperCase())
              .replace(/\b\w+\b/g, word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase());
}

function toTitleCaseAll(str) {
    return str.replace(/\b\w+\b/g, word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase());
}

function toLowerCase(str) {
    return str.toLowerCase();
}

function toUpperCase(str) {
    return str.replace(/[a-zA-Z]/g, char => char.toUpperCase());
}
Error Handling
Condition	Error Message
Invalid characters	"Only letters, numbers, @, -, and / are allowed"
Invalid email format	"Please enter a valid email address"
Required field empty	"This field is required"
Exceeds max length	"Maximum [X] characters allowed"
Validation Flow
text
User Input
    │
    ▼
Character Validation ────► Invalid ────► Error Message
    │
    ▼
Format Validation ────► Invalid ────► Error Message
    │
    ▼
Apply Transformation
    │
    ▼
Check Max Length ────► Exceeds ────► Truncate / Warning
    │
    ▼
Return Formatted Value
Field Configuration Reference
#	Field	Max Length	Format	Transformation
1	Name	50	Title Case	toTitleCase()
2	Nationality	50	Title Case	toTitleCase()
3	Street Address	100	Title Case	toTitleCase()
4	City	50	Title Case	toTitleCase()
5	Pick-up Location	50	Title Case	toTitleCase()
6	Return Location	50	Title Case	toTitleCase()
7	Country	50	Title Case	toTitleCase()
8	Full Address	200	Title Case All	toTitleCaseAll()
9	Email	100	Lowercase	toLowerCase()
10	Car Mark	30	Title Case	toTitleCase()
11	Car Model	30	Title Case	toTitleCase()
12	Car Color	30	Title Case	toTitleCase()
13	License Plate	30	Uppercase	toUpperCase()
14	VIN	30	Uppercase	toUpperCase()
15	CIN	30	Uppercase	toUpperCase()
16	Passport Number	30	Uppercase	toUpperCase()
17	International Permit Number	30	Uppercase	toUpperCase()
18	Driver License Number	30	Uppercase	toUpperCase()
19	License Category	30	Uppercase	toUpperCase()
20	ICE Number	30	Uppercase	toUpperCase()
21	Commercial Registry (RC)	30	Uppercase	toUpperCase()
22	Commercial Name	100	Title Case All	toTitleCaseAll()
23	Legal Company Name	100	Title Case All	toTitleCaseAll()
24	ZIP Code	10	Preserved	preserveOriginal()
Quick Reference Card
Email Validation
regex
^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$
Global Character Allowlist
regex
^[a-zA-Z0-9@\-\/\s]*$
Rules Summary
Group	Fields	Transformation
Title Case	Name, Nationality, Address, City, Locations, Country	"John Doe"
Title Case All	Full Address, Company Names	"Acme Corporation Ltd."
Lowercase	Email	"user@domain.com"
Uppercase	IDs, Licenses, Documents	"ABC123"
Preserved	ZIP Code	As entered