char::is_numeric în Rust

is_numeric: orice caracter numeric Unicode (inclusiv ½, ², Ⅻ); is_ascii_digit: doar cifrele 0–9.

Sintaxă
pub fn is_numeric(self) -> bool
pub const fn is_ascii_digit(&self) -> bool

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 apelezi to_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.