Javascript 用于unicode字符(波斯数字)的正则表达式
我有一个用于验证波斯日期的正则表达式,如下所示:Javascript 用于unicode字符(波斯数字)的正则表达式,javascript,regex,unicode,Javascript,Regex,Unicode,我有一个用于验证波斯日期的正则表达式,如下所示: ((((\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|\u066
((((\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 (٠۱-٠۹) | (۱۱ - ۲۹) | ۳٠ | ۳۱
但这一环节的测试并没有通过。我做错什么了吗?多亏了@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))
也许你对链接帖子上看到的内容感到困惑。看看如果我更改unicode块会发生什么@JvdV No,我在测试中使用了波斯语字符和regexBut,您测试它的文本显然是由我显示的链接中的扩展数字触发的。@JvdV是的,它们看起来很接近,但我知道区别,当我感到困惑时。当您将所有代码块更改为“U+06Fn”符号时,将触发链接中的示例文本。因此,您当前没有使用正确的unicode块。有什么让人困惑的?或者……我错过了什么?