正则表达与希伯来语或英语

时间:2012-02-08 16:06:32

标签: php regex preg-match hebrew

我正在寻找一种只接受2个字母到15个字母的希伯来语或英文字母的模式,并且可以接受1个空格。我尝试过以下代码,但它与我的字符串不匹配:

<?php
$subject = "שלום לך";
$regexp="#^\p[{Hebrew}| ][a-zA-Z]{2,15}? \+$#u";
print_r(preg_match($regexp, $subject));
?>

3 个答案:

答案 0 :(得分:5)

您的代码中存在多个错误。

首先,你的正则表达式

$regexp="#^\p[{Hebrew}| ][a-zA-Z]{2,15}? \+$#u";

这就是它的含义:

#                     : regex delimiter
  ^                   : begining of string
    \p                : character p
    [{Hebrew}| ]      : character class, one of the char : {, H, e, b, r, w, }, |, space 
    [a-zA-Z]{2,15}?   : from 2 to 15 alphabetic char
     \+               : a space followed by +
  $                   : end of string
#                     : regex delimiter
u                     : unicode

Unicode希伯来字符是:\p{Hebrew}
char类中没有|的需要 你的字符串中没有+,末尾没有空格
没有必要做不合适的匹配

因此可以改写为:

$regexp="#^[\p{Hebrew} a-zA-Z]{2,15}$#u";

<强>解释

#                 : regex delimiter
  ^               : begining of string
    [             : start class character
      \p{Hebrew}  : a hebrew character
                  : a space
      a-zA-Z      : a latin letter
    ]             : end of class
    {2,15}        : previous chars 2 to 15 times
  $               : end of string
#                 : regex delimiter
u                 : unicode

preg_match不返回数组,而是返回一个int,它保存在字符串中找到模式的时间。

然后你的脚本变成:

$subject = "שלום לך";
$regexp  = "#^[\p{Hebrew} a-zA-Z]{2,15}$#u";
preg_match($regexp, $subject, $m);
print_r($m);

答案 1 :(得分:1)

var regexp = /^[\u0591-\u05F4\s]+$/gi;
return regexp.test(str)

答案 2 :(得分:0)

this怎么样?剂量对你有用吗?

[\w\u0590-\u05FF]