u8::is_ascii_digit în Rust

Octeți: u8 Rust 1.24

Verifică dacă octetul este o cifră ASCII, de la b'0' la b'9'.

Sintaxă
const fn is_ascii_digit(&self) -> bool
// înrudite: is_ascii_alphabetic, is_ascii_alphanumeric, is_ascii_whitespace, is_ascii_uppercase

Ce face u8::is_ascii_digit

b.is_ascii_digit() returnează true doar pentru octeții b'0' … b'9' (valorile 48-57). Familia completă: is_ascii_alphabetic (litere a-z, A-Z), is_ascii_alphanumeric, is_ascii_whitespace, is_ascii_punctuation, is_ascii_uppercase, is_ascii_lowercase, is_ascii_hexdigit.

Lucrul direct pe octeți este rapid și potrivit pentru formate simple (coduri poștale, numere de telefon, protocoale text). Aceleași metode există și pe char. Valoarea cifrei se obține cu b - b'0'.

Ce returnează

bool.

Exemple

Exemplul 1: Validarea unui cod poștal

Un cod poștal din România are exact 6 cifre.

fn cod_postal_valid(cod: &str) -> bool {
    cod.len() == 6 && cod.bytes().all(|b| b.is_ascii_digit())
}

fn main() {
    for cod in ["700259", "400 001", "50003", "5000a3", "٧٠٠٢٥٩"] {
        println!("{cod:8} valid: {}", cod_postal_valid(cod));
    }
}

Rezultat

700259   valid: true
400 001  valid: false
50003    valid: false
5000a3   valid: false
٧٠٠٢٥٩   valid: false

Exemplul 2: Extrage și adună cifrele dintr-un text

fn main() {
    let text = b"Comanda 2026-10: 3 caiete, 12 pixuri";
    let cifre: Vec<u8> = text.iter().filter(|b| b.is_ascii_digit()).map(|b| b - b'0').collect();
    println!("cifre: {cifre:?}");
    println!("suma cifrelor: {}", cifre.iter().map(|&c| c as u32).sum::<u32>());

    let litere = text.iter().filter(|b| b.is_ascii_alphabetic()).count();
    let spatii = text.iter().filter(|b| b.is_ascii_whitespace()).count();
    println!("litere: {litere}, spații: {spatii}");
}

Rezultat

cifre: [2, 0, 2, 6, 1, 0, 3, 1, 2]
suma cifrelor: 17
litere: 19, spații: 5

Greșeli frecvente

  • Folosești char::is_numeric crezând că e la fel: acceptă și cifre din alte alfabete (arabe, chinezești). Pentru cifrele 0-9, folosește is_ascii_digit.
  • Verifici b >= 48 && b <= 57 cu numere: is_ascii_digit() sau (b'0'..=b'9').contains(&b) sunt mai clare.

Comenzi înrudite

  • u8: Întreg fără semn pe 8 biți (0-255): tipul unui octet, folosit pentru date binare și text ASCII/UTF-8.
  • u8::to_ascii_uppercase: Transformă un octet literă ASCII mică în literă mare; orice alt octet rămâne neschimbat.
  • ParseIntError: Eroarea returnată când un text nu poate fi transformat în număr întreg; kind() spune motivul exact.