регулярное выражение с иврита или английского - PullRequest
2 голосов
/ 08 февраля 2012

Я ищу шаблон, который принимает только буквы иврита или английского алфавита от 2 до 15 и может принимать 1 пробел. Я пробовал следующий код, но он не соответствует моей строке:

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

Ответы [ 3 ]

5 голосов
/ 11 февраля 2012

В вашем коде несколько ошибок.

Во-первых, ваше регулярное выражение

$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

Юникод иврит символ: \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 голос
/ 24 декабря 2012
var regexp = /^[\u0591-\u05F4\s]+$/gi;
return regexp.test(str)
0 голосов
/ 08 февраля 2012

Как насчет этого ?Доза, которая работает для вас?

[\w\u0590-\u05FF]
...