得到一些字母字符,没有别的

时间:2015-06-03 14:42:15

标签: php regex

我想检查输入是否是波斯语,并且它至少有3个字符。 当我使用下面的正则表达式时它起作用。它检查单词的开头是否是波斯语,但我希望它也以波斯语结尾,并且不包含英文字母和数字。

/^[ئابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهآی\s]{3,}/

为确保以波斯语结尾,我在$之后添加],但我收到此错误:

  

警告:preg_match():编译失败:无法在偏移量77处重复

/^[ئابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهآی\s]${3,}/

此外,结束括号\s之前的]是什么?这是新线吗?

2 个答案:

答案 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
}