我正在寻找一种只接受2个字母到15个字母的希伯来语或英文字母的模式,并且可以接受1个空格。我尝试过以下代码,但它与我的字符串不匹配:
<?php
$subject = "שלום לך";
$regexp="#^\p[{Hebrew}| ][a-zA-Z]{2,15}? \+$#u";
print_r(preg_match($regexp, $subject));
?>
答案 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]