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”字符的主要内容,如果未能解决你的问题,请参考以下文章