2017-01-17 2 views
-4

Я извлечения значения команд NEXT из моих продуктов Размер: 30х50 или 20х20PHP: Проверьте, если моя строка содержит только цифры и «X» символ

Я хочу добавить «см» меру, если это значения contais на характер х или X и только числа.

@if($myvalue contains only the character x and numbers) 
{{ $myvalue }} cm // like 20x20cm 
@endif 

Мне нужно регулярное выражение. Я стараюсь с этим:

@if (preg_match('/^\d*(x|X){1}\d*$/',$item->name)) cm.[email protected] 

Но не работает

+1

Как получить регулярное выражение - ваш вопрос? Ну, написав это. Для этого вам нужно узнать о регулярных выражениях. Вы начали это делать? – arkascha

+3

Обратите внимание: SO не является бесплатной услугой кодирования. Мы не хотим здесь твоей работы. Мы здесь, чтобы помочь с конкретными проблемами, с которыми вы сталкиваетесь в своем собственном коде. Так что начните сами, если у вас возникнут серьезные проблемы, _then_ - это время, чтобы прийти сюда, опубликовать свой код и указать на ту проблему, с которой вы столкнулись. – arkascha

+0

Советы: https://regex101.com и http://php.net/manual/en/function.preg-match.php Это не требует сложного регулярного выражения. – Blaatpraat

ответ

0

Не использовать регулярные выражения в таком тривиальном случае. Например, вы можете написать свою собственную функцию разбора домена.

/** 
* Parse dimension 
* 
* @return array [dimX, dimY] or empty array when invalid input 
*/ 
function parse(string $meta): array { 

    $parseTree = explode('x', strtolower($meta)); 

    if (2 != \count($parseTree) 
      || !ctype_digit($parseTree[0]) 
       || !ctype_digit($parseTree[1])) { 
     return []; 
    } 

    return $parseTree; 

} 


/** 
* Test {@see parse} 
* @throws \LogicException When test failed 
*/ 
function testParse() { 

    $dataProvider = [ 
     ['20x50', [20, 50]], 
     ['20X50', [20, 50]], 
     ['20z50', []], 
     ['a20x50', []], 
     ['20xa50', []], 
    ]; 


    foreach($dataProvider as $serie) { 
     if (parse($serie[0]) != $serie[1]) { 
      throw new \LogicException('Test failed'); 
     } 
    } 

} 


testParse(); 
+1

Дайте мне повод, почему вы не будете использовать регулярное выражение для этого – Blaatpraat

+0

Менее гибкое, настраиваемое при работе с данными домена. –

+2

Пока вы используете только примитивные типы, регулярное выражение - это путь. С пользовательским кодом вы менее гибким, чем с регулярным выражением. Пользовательский код также медленнее и значительно зависит от ресурса. Только когда вы не можете работать с регулярными выражениями (объектными данными), пользовательский код - это путь. – Blaatpraat

Смежные вопросы