Regex Matching with =~ Operator

Uses Bash regex matching with the =~ operator for pattern validation, extraction, and conditional logic including email, IP, and URL validation.

BashForm Validation

Code

snippet
#!/usr/bin/env bash
set -euo pipefail

# Email validation
validate_email() {
    local email=$1
    local regex="^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
    if [[ "$email" =~ $regex ]]; then
        echo "Valid email: $email"
        return 0
    else
        echo "Invalid email: $email"
        return 1
    fi
}

# IP address validation
validate_ip() {
    local ip=$1
    local regex="^([0-9]{1,3}\.){3}[0-9]{1,3}$"
    if [[ "$ip" =~ $regex ]]; then
        IFS="." read -ra octets <<< "$ip"
        for octet in "${octets[@]}"; do
            (( octet > 255 )) && return 1
        done
        echo "Valid IP: $ip"
        return 0
    fi
    echo "Invalid IP: $ip"
    return 1
}

# URL parsing
parse_url() {
    local url=$1
    local regex="^(https?)://([^/:]+)(:([0-9]+))?(/.*)?$"
    if [[ "$url" =~ $regex ]]; then
        echo "Protocol: ${BASH_REMATCH[1]}"
        echo "Host: ${BASH_REMATCH[2]}"
        echo "Port: ${BASH_REMATCH[4]:-default}"
        echo "Path: ${BASH_REMATCH[5]:-/}"
    else
        echo "Invalid URL: $url"
    fi
}

# Version number extraction
extract_version() {
    local str=$1
    local regex="([0-9]+)\.([0-9]+)\.([0-9]+)"
    if [[ "$str" =~ $regex ]]; then
        echo "Major: ${BASH_REMATCH[1]}"
        echo "Minor: ${BASH_REMATCH[2]}"
        echo "Patch: ${BASH_REMATCH[3]}"
    fi
}

# Test validations
echo "=== Email Validation ==="
validate_email "[email protected]"
validate_email "invalid-email"

echo "=== IP Validation ==="
validate_ip "192.168.1.1"
validate_ip "256.1.1.1"

echo "=== URL Parsing ==="
parse_url "https://example.com:8080/api/v1"
parse_url "http://localhost/path"

echo "=== Version Extraction ==="
extract_version "Version 2.5.3 released"