persian_str_rs/
lib.rs

1use regex::Regex;
2
3pub fn transform_to_persian_digits(text: &str) -> String {
4    text.replace("0", "۰")
5        .replace("1", "۱")
6        .replace("2", "۲")
7        .replace("3", "۳")
8        .replace("4", "۴")
9        .replace("5", "۵")
10        .replace("6", "۶")
11        .replace("7", "۷")
12        .replace("8", "۸")
13        .replace("9", "۹")
14}
15
16pub fn transform_int_to_persian_digits(value: i32) -> String {
17    transform_to_persian_digits(&format!("{}", value))
18}
19
20pub fn transform_to_english_digits(text: &str) -> String {
21    text.replace("۰", "0")
22        .replace("۱", "1")
23        .replace("۲", "2")
24        .replace("۳", "3")
25        .replace("۴", "4")
26        .replace("۵", "5")
27        .replace("۶", "6")
28        .replace("۷", "7")
29        .replace("۸", "8")
30        .replace("۹", "9")
31}
32
33pub fn filter_english_numbers(text: &str) -> String {
34    let re = regex::Regex::new(r"[^0-9.]").unwrap();
35    re.replace_all(text, "").to_string()
36}
37
38pub fn filter_persian_numbers(text: &str) -> String {
39    //let re = Regex::new(r"[^۰-۹.]").unwrap();
40    let re = Regex::new(r"[^۰۱۲۳۴۵۶۷۸۹]").unwrap();
41    //let re = Regex::new(r"[^\p{Nd}]").unwrap();
42    re.replace_all(text, "").to_string()
43}
44
45pub fn numeric_only(text: &str) -> String {
46    let re = Regex::new(r"[^۰-۹0-9.]").unwrap();
47    re.replace_all(text, "").to_string()
48}
49
50pub fn filter_non_persian_alphabet(text: &str) -> String {
51    let re = Regex::new(r"[^\u{0600}-\u{06FF}.]").unwrap();
52    re.replace_all(text, "").to_string()
53}
54
55pub fn normalize_arabic(text: &str) -> String {
56    let replacements = [
57        ("ي", "ی"),
58        ("ك", "ک"),
59        ("دِ", "د"),
60        ("بِ", "ب"),
61        ("زِ", "ز"),
62        ("ذِ", "ذ"),
63        ("ِشِ", "ش"),
64        ("ِسِ", "س"),
65        ("ى", "ی"),
66    ];
67
68    let mut result = text.to_owned();
69    for (from, to) in replacements.iter() {
70        result = result.replace(from, to);
71    }
72    result
73}
74
75