2017-01-17 24 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

相关问题