Задать вопрос
@mister_werew
Начинающий wordpress, php

Как правильно сделать проверку в выражении?

Добрый вечер!
Есть 3 строки:
$string1 = '<p>текст</p>';
$string2 = '<p style="color: #000;">текст</p>';
$string3 = '<p width="200" height="200" style="color: #000;">текст</p>';


Пытаюсь сделать проверку каждой из этих строк отдельно. Что нужно дополнить, чтобы при проверке $string1 и $string2 выводилось Yes, а когда проверяешь $string3 и в нем есть атрибуты кроме style выводить Error?
if(!preg_match('/<p(.*?)(style="(.*?)")><\/p>/i', $string3)){
	echo "Error";
}else{
	echo "Yes";
}
  • Вопрос задан
  • 130 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
TrogWarZ
@TrogWarZ
web developer
Парсинг html регекспами – зло, имхо.

Вариант с DOM-парсером (см. мануалы по языку):
<?php

// Test data

$string1 = '<p>текст</p>';
$string2 = '<p style="color: #000;">текст</p>';
$string3 = '<p width="200" height="200" style="color: #000;">текст</p>';

// Working function
function checkStringParagraphHasNoStyle(string $string = '') : bool
{
    $doc = new DOMDocument();
    $doc->loadHTML($string);
    $p = $doc->getElementsByTagName('p')->item(0);

    // Logic
    if (!$p->hasAttribute('style')) return true;
    $p->removeAttribute('style');

    return $p->attributes->length < 1;
}

// Testing

assert(true === checkStringParagraphHasNoStyle($string1));
assert(true === checkStringParagraphHasNoStyle($string2));
assert(false === checkStringParagraphHasNoStyle($string3));

echo 'It Works!' . PHP_EOL;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы