PHP:检查我的字符串是不是只包含数字和“X”字符

Posted

技术标签:

【中文标题】PHP:检查我的字符串是不是只包含数字和“X”字符【英文标题】:PHP: Check if my string only contains numbers and "X" characterPHP:检查我的字符串是否只包含数字和“X”字符 【发布时间】:2017-06-01 16:01:13 【问题描述】:

我检索我的尺寸产品的下一个值:30X50 或 20x20

如果这个值包含字符 x 或 X 并且只有数字,我想添加“cm”度量。

@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.@endif

但不起作用

【问题讨论】:

如何获取正则表达式是您的问题?好吧,通过写它。为此,您必须了解正则表达式。你开始这样做了吗? 请注意,SO 不是免费的编码服务。我们不是来为你做你的工作。我们在这里帮助您解决特定问题您遇到在您自己的代码中。所以从你自己开始吧,如果你遇到严重的问题,那么是时候来到这里,发布你的代码并指出你遇到的问题。 提示:regex101.com 和 php.net/manual/en/function.preg-match.php 这不需要复杂的正则表达式。 @arkascha 我编辑主帖 【参考方案1】:

在这种微不足道的情况下不要使用正则表达式。例如,您可以编写自己的域解析函数。

/**
 * 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();

【讨论】:

在处理域数据时不太灵活,可维护。 只要您只使用原始类型,正则表达式就是要走的路。使用自定义代码,您的灵活性不如使用正则表达式。自定义代码也更慢,并且更依赖资源。只有当您无法使用正则表达式(对象数据)时,才可以使用自定义代码。 在解析和验证域数据和处理输入之间存在差异。例如,我可以有许多验证装饰器功能等。

以上是关于PHP:检查我的字符串是不是只包含数字和“X”字符的主要内容,如果未能解决你的问题,请参考以下文章

php 检查字符串是否只包含字母和数字

Lua:如何检查字符串是不是只包含数字和字母?

php 检查字符串是否只包含数字

检查字符串是不是仅包含数字

检查字符串是不是只包含 PHP 中的 URL

检查字符串是不是为整数(包括负数) PHP