Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Группировка символов preg_match


Автор: night00 4.1.2012, 23:29
Здравствуйте.

Код

$eng_char_pattern = "/^([0-9a-zA-Z\\.\\, _+\\-\\s]+)\$/D";


Никак не могу подобрать правильное регулярное выражение, чтобы оно пропускало в троке " но не пропускало & и ; по отдельности.
Бьюсь уже целый день, но решения не нашёл..

Заранее спасибо..

Автор: ksnk 5.1.2012, 00:33
Код

$eng_char_pattern = "/^([^&]|&\w+;)+$/D";

Вместо ^& можно подставить тот длинный символьный класс, если очень нужно

Автор: night00 5.1.2012, 11:52
Спасибо, но проблема в том, что такая регулярка пропускает символы & и ; по отдельности.
А смысл в том, чтобы эти символы пропускались _только_ в сочетании с quot и в строгой последовательности ( " )
То есть если дадут &q; или &quo; или &touq; или &; - они пройти не должны, только "

Автор: ksnk 5.1.2012, 12:12
Ну и? Проходят, чтоли?
Код

$tests=array(
'lasdnxfr & ыча ук очалукопке', //not match
'lasdnxfr   ыча ук очалукопке', // match
'lasdnxfr &вась; ыча ук очалукопке', //not match
'lasdnxfr & nbsp ; ыча ук очалукопке', //not match
'lasdnxfr &xxx; ыча ук очалукопке', // match
'lasdnxfr &&&&; ыча ук очалукопке', //not match
);
$eng_char_pattern = "/^(?:[^&]|&[a-z]+;)+$/iD";
foreach($tests as $v){
echo '<hr>'.htmlspecialchars($v).'<br>';
  if(preg_match($eng_char_pattern ,$v))
  echo 'match
';
  else
    echo 'not match
';
 
};

поменял \w на [a-z] и добавил модификатор i, чтобы не проходили русские буквы в регулярке + поменят на незахватывающую маску. Все остальное - тоже самое.

Автор: night00 5.1.2012, 12:42
Нет, но проходят, к примеру, &amp; и |
Мне нужно проверить название фирмы на английском, например, JSC &quot;New Time&quot;
Соответственно, никаких &amp; и | там быть не должно..

пробел, A-Z, a-z и строго &quot; - вот только это должно быть разрешено..

Автор: ksnk 5.1.2012, 13:36
Код

$eng_char_pattern = '/^(?:[0-9a-z\.\,_+\-\s]|&quote;)+$/iD';


Автор: night00 5.1.2012, 14:10
Спасибо!

только $eng_char_pattern = '/^(?:[0-9a-z\.\,_+\-\s]|&quot;)+$/iD';

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)