#phone-number #pest-parser #numbers #grammar #ukrainian #validation #valid

bin+lib phone_parser

能够解析电话号码的解析器

1 个不稳定版本

0.1.0 2023年11月8日

#2573解析实现

MIT 许可证

6KB
56

PhoneNumberParser

这是一个用于解析和验证乌克兰电话号码(格式为 "+380XXXXXXXXX.")的 Rust 库。它使用 Pest 库进行解析。

解析过程

PhoneNumberParser 库旨在解析和验证乌克兰电话号码。它在 grammar.pest 文件中定义了语法,指定了有效电话号码的格式。然后解析器使用此语法来验证提供的输入字符串中的电话号码。

解析过程涉及以下步骤

  1. 输入字符串由 PhoneNumberParser 处理,检查其是否与语法规则匹配。

  2. 解析器验证电话号码以 "+380" 开头,后面跟着数字

用法

您可以在 Rust 项目中使用 PhoneNumberParser 验证乌克兰电话号码。该库提供了一个 is_valid_phone_number 函数,对于有效电话号码返回 true,对于无效的电话号码返回 false

use phone_number_parser::is_valid_phone_number;

fn main() {
    let phone_numbers = vec!["+380992121211", "+38099232323", "123456789", "+380992121a11"];

    for phone_number in phone_numbers {
        if is_valid_phone_number(phone_number) {
            println!("Valid phone number: {}", phone_number);
        } else {
            println!("Invalid phone number: {}", phone_number);
        }
    }
}

您可以在以下代码块中检查不同的测试

#[cfg(test)]
mod tests {

    use super::*;


    #[test]
    fn test_valid_phone_numbers() -> anyhow::Result<()> {
      let pair = PhoneNumberParser::parse(Rule::phoneNumber, "+380992121211")?.next().ok_or_else(|| anyhow!("no pair"))?;

      assert_eq!( pair.as_span().start(), 0 );
      assert_eq!( pair.as_span().end(), 13 );
        Ok(())
    }

    #[test]
    fn test_valid_phone_numbers_fail() -> anyhow::Result<()> {
      let pair = PhoneNumberParser::parse(Rule::phoneNumber, "380992121211");

      assert!( pair.is_err() );
    Ok(())
    }

    #[test]
    fn test_valid_phone_numbers_fail_lenght() -> anyhow::Result<()> {
      let pair = PhoneNumberParser::parse(Rule::phoneNumber, "+380992121")?.next().ok_or_else(|| anyhow!("no pair"))?;

      assert_eq!( pair.as_span().start(), 0 );
      assert_eq!( pair.as_span().end(), 13, "Must be +38 and 10 digits in lenght!" );
        Ok(())
    }

}

依赖项

~2.2–3MB
~59K SLoC