我想检查输入是否是波斯语,并且它至少有3个字符。 当我使用下面的正则表达式时它起作用。它检查单词的开头是否是波斯语,但我希望它也以波斯语结尾,并且不包含英文字母和数字。
/^[ئابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهآی\s]{3,}/
为确保以波斯语结尾,我在$
之后添加]
,但我收到此错误:
警告:preg_match():编译失败:无法在偏移量77处重复
/^[ئابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهآی\s]${3,}/
此外,结束括号\s
之前的]
是什么?这是新线吗?
答案 0 :(得分:2)
使用
/^[ئابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهآی\s]{3,}$/u
$
是行/字符串锚点的结尾,无法量化(即您不能使用+
或*
或{1,}
之后。
请参阅demo
对于\s
,它只匹配此集合中的空格:[\r\n\t\f ]
。
编辑:使用Rishida Unicode Converter,我re-wrote your expression使用\x
块:
/^[\x{626}-\x{628}\x{67E}\x{62A}-\x{62C}\x{686}\x{62D}\x{62E}\x{62F}-\x{632}\x{698}\x{633}-\x{63A}\x{641}\x{642}\x{6A9}\x{6AF}\x{644}-\x{648}\x{622}\x{6CC}]{3,}$/u
它不允许空格并且看起来比should also work ^[ئابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهآی]{3,}$
看起来更好(BTW,在MS Word中它看起来更漂亮:)。
答案 1 :(得分:1)
要匹配您可以使用的阿拉伯字母:
^[\x{600}-\x{6FF}]{3,}$
if (preg_match('/^[\x{600}-\x{6FF}]{3,}$/u', $value)) {
# match
} else {
# no match
}