【问题标题】:regex for unicode charachters (persian numbers)Unicode 字符的正则表达式(波斯数字)
【发布时间】:2020-12-22 08:44:44
【问题描述】:

我有一个用于验证波斯日期的正则表达式,如下所示:

((((\u0661\u0663|\u0661\u0664)[\u0660-\u0669]{2})(\/|-)(\u0660[\u0660-\u0669]{1}|\u0661\u0661|\u0661\u0662))(\/|-)(\u0660[\u0661-\u0669]{1}|(\u0661|\u0662)[\u0660-\u0669]{1}|\u0663\u0660|\u0663\u0661))

1.
(\u0661\u0663|\u0661\u0664)[\u0660-\u0669]{2} : only match ۱۳|۱۴ followed by two char between [٠-۹] 
match: ۱۳۹۹ , ۱۴٠٠
not match: ۱۲۹۹
2. 
separator can be / | -
3.
(\u0660[\u0660-\u0669]{1}|\u0661\u0661|\u0661\u0662)) : (٠ with following single char between [۱-۹]) | ۱۱ | ۱۲
match: ٠۱ , ٠۹, ۱۱ , ۱۲
not match: ۱۳ , ۲۱ , ٠٠ , etc
4.
(\u0660[\u0661-\u0669]{1}|(\u0661|\u0662)[\u0660-\u0669]{1}|\u0663\u0660|\u0663\u0661) : match (٠۱-٠۹) |  (۱۱ - ۲۹) | ۳٠ | ۳۱

但是在这个test 链接中的测试没有通过。我做错什么了吗?

【问题讨论】:

  • 也许您对链接帖子中的"EXTENDED ARABIC-INDIC DIGIT" 感到困惑。看看如果我更改 unicode 块会发生什么here
  • @JvdV 不,我在测试和正则表达式中使用了波斯字符
  • 但是,您测试它的文本显然是由我显示的链接中看到的扩展数字触发的。
  • @JvdV 是的,他们看起来很近,但我知道区别
  • 那我就糊涂了。当您将所有代码块更改为“U+06Fn”表示法时,会触发链接中的示例文本。所以你目前 not 使用了正确的 unicode 块。有什么令人困惑的?或者....我在这里错过了什么?

标签: javascript regex unicode


【解决方案1】:

感谢@JvdV,我在获取波斯数字字符的 unicode 时犯了一个错误。正确的正则表达式是:

((((\u06F1\u06F3|\u06F1\u06F4)[\u06F0-\u06F9]{2})(\/|-)(\u06F0[\u06F0-\u06F9]{1}|\u06F1\u06F1|\u06F1\u06F2))(\/|-)(\u06F0[\u06F1-\u06F9]{1}|(\u06F1|\u06F2)[\u06F0-\u06F9]{1}|\u06F3\u06F0|\u06F3\u06F1))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2013-06-23
    • 1970-01-01
    • 2011-03-02
    • 2010-09-26
    • 1970-01-01
    相关资源
    最近更新 更多