🦀/100 Projects/Notes/Source

src/main.rs

View on GitHub
use regex::Regex;
use std::io::{self, Write};
use colored::Colorize;

fn main() {
    println!("{}", "✅ Data Validation Tool".bright_green());

    let email_regex = Regex::new(r"^[\w\.-]+@[\w\.-]+\.\w+$").unwrap();
    let phone_regex = Regex::new(r"^\+?[0-9]{10,15}$").unwrap();

    loop {
        println!("\nChoose what to validate:");
        println!("1. Email");
        println!("2. Phone Number");
        println!("3. Password Strength");
        println!("4. Exit");

        match input("Your choice: ").as_str() {
            "1" => validate_email(&email_regex),
            "2" => validate_phone(&phone_regex),
            "3" => validate_password(),
            "4" => {
                println!("{}", "👋 Exiting.".bright_blue());
                break;
            }
            _ => println!("{}", "❌ Invalid choice.".bright_red()),
        }
    }
}

fn input(prompt: &str) -> String {
    print!("{}", prompt);
    io::stdout().flush().unwrap();
    let mut buf = String::new();
    io::stdin().read_line(&mut buf).unwrap();
    buf.trim().to_string()
}

fn validate_email(email_regex: &Regex) {
    let email = input("Enter email: ");
    if email_regex.is_match(&email) {
        println!("{}", "✅ Valid email.".bright_green());
    } else {
        println!("{}", "❌ Invalid email.".bright_red());
    }
}

fn validate_phone(phone_regex: &Regex) {
    let phone = input("Enter phone number (e.g., +1234567890): ");
    if phone_regex.is_match(&phone) {
        println!("{}", "✅ Valid phone number.".bright_green());
    } else {
        println!("{}", "❌ Invalid phone number.".bright_red());
    }
}

fn validate_password() {
    let pwd = input("Enter password: ");
    match check_password_strength(&pwd) {
        Ok(true) => println!("{}", "✅ Strong password.".bright_green()),
        Ok(false) => println!(
            "{}",
            "❌ Weak password (must be 8+ chars, contain upper, lower, digit, and symbol).".bright_red()
        ),
        Err(e) => println!("{}: {}", "❌ Error validating password".bright_red(), e),
    }
}

fn check_password_strength(pwd: &str) -> Result<bool, String> {
    if pwd.len() < 8 {
        return Ok(false);
    }

    let has_lowercase = pwd.chars().any(|c| c.is_ascii_lowercase());
    let has_uppercase = pwd.chars().any(|c| c.is_ascii_uppercase());
    let has_digit = pwd.chars().any(|c| c.is_ascii_digit());
    let has_special = pwd.chars().any(|c| !c.is_ascii_alphanumeric());

    Ok(has_lowercase && has_uppercase && has_digit && has_special)
}

← Back to folder