Ce face char::is_numeric
is_numeric() folosește categoriile Unicode pentru numere, deci acceptă și cifre din alte scrieri (arabe ٣), fracții (½), exponenți (²) și cifre romane (Ⅻ). Nu toate acestea se pot converti cu to_digit.
is_ascii_digit() returnează true doar pentru '0'–'9'. Este verificarea potrivită înainte de to_digit(10) sau când validezi coduri poștale, CNP-uri, numere de telefon.
Ce returnează
bool.
Exemple
Exemplul 1: Diferența dintre cele două
fn main() {
for c in ['7', '٣', '½', '²', 'Ⅻ', 'a'] {
println!(
"{c}: is_numeric = {:5}, is_ascii_digit = {:5}, to_digit = {:?}",
c.is_numeric(),
c.is_ascii_digit(),
c.to_digit(10)
);
}
}
Rezultat
7: is_numeric = true , is_ascii_digit = true , to_digit = Some(7)
٣: is_numeric = true , is_ascii_digit = false, to_digit = None
½: is_numeric = true , is_ascii_digit = false, to_digit = None
²: is_numeric = true , is_ascii_digit = false, to_digit = None
Ⅻ: is_numeric = true , is_ascii_digit = false, to_digit = None
a: is_numeric = false, is_ascii_digit = false, to_digit = None
Exemplul 2: Validarea unui cod poștal românesc
fn cod_postal_valid(cod: &str) -> bool {
cod.len() == 6 && cod.chars().all(|c| c.is_ascii_digit())
}
fn main() {
for cod in ["700259", "70025", "7002S9", "٧٠٠٢٥٩"] {
println!("{cod}: {}", cod_postal_valid(cod));
}
}
Rezultat
700259: true
70025: false
7002S9: false
٧٠٠٢٥٩: false
Greșeli frecvente
- Validezi cu
is_numericși apoi apelezito_digit(10).unwrap(): pentru'½'programul se oprește cu panică.
Comenzi înrudite
char::to_digit: to_digit transformă o cifră (‘7’, ‘f’) în număr într-o bază dată; from_digit face invers. Ambele returnează Option.char::is_alphabetic: Verifică dacă un caracter este literă (is_alphabetic) sau literă ori cifră (is_alphanumeric), după Unicode.str::parse: Transformă textul într-o altă valoare (număr, bool, char, IP, tip propriu) și returnează Result.