Rust user input validation: Propagate Validation Errors
Write a Rust program that processes user input, validates it against certain rules, and propagates validation errors.
Sample Solution:
Rust Code:
use std::io;
use std::error::Error;
// Function to validate user input against certain rules
fn validate_input(input: &str) -> Result<(), Box<dyn Error>> {
// Check if the input length is within a valid range
if input.len() < 3 || input.len() > 10 {
return Err("Input length must be between 3 and 10 characters.".into());
}
// Check if the input contains only alphanumeric characters
if !input.chars().all(|c| c.is_ascii_alphanumeric()) {
return Err("Input must contain only alphanumeric characters.".into());
}
Ok(()) // Return Ok if input passes all validation rules
}
fn main() -> Result<(), Box<dyn Error>> {
println!("Enter your username (3 to 10 alphanumeric characters):");
let mut input = String::new();
io::stdin().read_line(&mut input)?;
let input = input.trim(); // Trim leading and trailing whitespace
// Validate user input
match validate_input(input) {
Ok(_) => println!("Input is valid!"),
Err(err) => eprintln!("Validation error: {}", err),
}
Ok(()) // Return Ok if the program completes successfully
}
Output:
Enter your username (3 to 10 alphanumeric characters): abc123 Input is valid!
Enter your username (3 to 10 alphanumeric characters): Ab@#12n Validation error: Input must contain only alphanumeric characters.
Explanation:
Here is a brief explanation of the above Rust code:
- Imports:
- use std::io: Imports the Input/Output module from the standard library, allowing interaction with the standard input stream (stdin) for user input.
- use std::error::Error: Imports the "Error" trait from the standard library, which is used for error handling.
- validate_input Function:
- This function takes a string slice (&str) representing the user input and returns a Result<(), Box<dyn Error>>.
- It checks if the input length is within the range of 3 to 10 characters. If not, it returns an error indicating that the input length must be between 3 and 10 characters.
- It verifies if the input contains only alphanumeric characters using the "chars()" iterator and the "is_ascii_alphanumeric()" method. If any character fails this check, it returns an error indicating that the input must contain only alphanumeric characters.
- If the input passes all validation rules, it returns Ok(()), indicating that the input is valid.
- main Function:
- This is the entry point of the program and returns a Result<(), Box<dyn Error>>.
- It prompts the user to enter a username within the specified range and format.
- It reads the user input from the standard input (stdin) and stores it in a mutable 'String' variable.
- Leading and trailing whitespace is trimmed from the input using the "trim()" method.
- The "validate_input()" function validates user input.
- If the input is valid (Ok(_)), it prints a message indicating that the input is valid. If there's a validation error (Err(err)), it prints an error message indicating the validation error.
- Finally, it returns Ok(()) if the program completes successfully
Rust Code Editor:
Previous: Rust Configuration Parser: Apply Settings & Handle errors.
Next: Rust user input validation: Efficient error propagation.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics