为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查变量是否具有语法以及如何将其拆分为数组?

如何检查变量是否具有语法以及如何将其拆分为数组?

PHP
慕田峪7331174 2023-03-11 16:46:23
我的数据库字段中有以下字符串“L{id_extern}S{LocationId}”。此字符串是输入字段的可接受语法。在这个例子中只有输入应该接受满足“ L something S something”例如<input name="myinput" value="12345"> - is not correct<input name="myinput" value="L12345"> - is not correct<input name="myinput" value="L123S45"> - is correct我必须将值 (12345) 与语法字符串进行比较。“{...}”之间的部分可以有无限的(最少需要 1 个)数字和字母。首先,我需要拆分语法字符串并使其在多维数组中可用,例如$myArray['placeholder1']=id_extern;$myArray['placeholder2']=LocationId;我如何将字符串拆分成这种数组的一种?我如何将输入字段的值与我想要的语法 L{id_extern}S{LocationId} 进行比较?我认为 pregmatch 可以提供帮助,但我不知道它是如何工作的。
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

您可以执行preg_match_all(),其中使用以下正则表达式需要至少 1 个(但可能有多个)字符,它是字母 az 或 AZ 或介于 0-9 之间和L之后S的数字S


就像是:


<?php


$strings = ['12345', 'L12345', 'L1S1', 'LS1',  'L123S45', 'L1x23S4yZY5', 'L1x!23S4y5'];


foreach($strings as $string) {

    $hasMatches = preg_match_all('/^L([0-9a-zA-Z]+)S([0-9a-zA-Z]+)/m', $string, $matches, PREG_SET_ORDER, 0);

    if(filter_var($hasMatches, FILTER_VALIDATE_BOOLEAN)) { // converts $hasMatches to boolean

        echo 'THERE IS A MATCH: "' . $matches[0][0] . '"' . "\n";

        echo '1st part: ' . $matches[0][1] . "\n";

        echo '2nd part: ' . $matches[0][2] . "\n\n";

    }

}

上面的输出是:


THERE IS A MATCH: "L1S1"

1st part: 1

2nd part: 1


THERE IS A MATCH: "L123S45"

1st part: 123

2nd part: 45


THERE IS A MATCH: "L1x23S4yZY5"

1st part: 1x23

2nd part: 4yZY5



查看完整回答
反对 回复 2023-03-11
  • 1 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信