2017-01-17 42 views
-4

我找回我的尺寸產品的nextS值:30×或20×20PHP:檢查我的字符串僅包含數字和「X」字符

我要添加「釐米」的措施,如果這個值contais字符x或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)) [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

相關問題