更快的PHP正则表达式测试

更快的PHP正则表达式测试,php,arrays,json,regex,preg-match,Php,Arrays,Json,Regex,Preg Match,我需要清理通常带有表单的传入JSON '["P4950Zp550","P4950Zp575","P4950Zp600","P5000Zp550","P5000Zp575","P5000Zp600","P4975Zp550","P4975Zp600"]' 每个p | M,p | M后面的数字数在3到5之间变化json_解码然后应用测试 preg_match('/(P|M){1}[0-9]{3,5}Z(p|m){1}[0-9]{3,5}/',$value) 八次,在foreach循环中,(我在数

我需要清理通常带有表单的传入JSON

'["P4950Zp550","P4950Zp575","P4950Zp600","P5000Zp550","P5000Zp575","P5000Zp600","P4975Zp550","P4975Zp600"]'
每个
p | M
p | M
后面的数字数在3到5之间变化<代码>json_解码然后应用测试

preg_match('/(P|M){1}[0-9]{3,5}Z(p|m){1}[0-9]{3,5}/',$value)

八次,在
foreach
循环中,(我在数组中总是有八个值)将是一件小事。然而,我想知道是否有一个正则表达式可以在oner中编写,而不必首先对传入字符串进行
json\u解码。我在这里创建的正则表达式限制了我对正则表达式的了解

解码JSON,然后使用循环:

$json = '["P4950Zp550","P4950Zp,575","P4950Zp600","P5000Zp550","P5000Zp,575","P5000Zp600","P4975Zp550","P4975Zp600"]';
$array = json_decode($json, true);
foreach ($array as $value) {
    if (!preg_match('/^[PM]\d{3,5}Z[pm]\d{3,5}$/',$value)) {
        echo "Invalid value: $value<br>\n";
    }
}
$json='[“P4950Zp550”、“p4950zp575”、“P4950Zp600”、“P5000Zp550”、“p5000zp575”、“P5000Zp600”、“P4975Zp550”、“P4975Zp600”];
$array=json_decode($json,true);
foreach($array作为$value){
如果(!preg_match('/^[PM]\d{3,5}Z[PM]\d{3,5}$/',$value)){
echo“无效值:$value
\n”; } }


尝试用regexp解析原始JSON是个坏主意。

解码JSON,然后使用循环:

$json = '["P4950Zp550","P4950Zp,575","P4950Zp600","P5000Zp550","P5000Zp,575","P5000Zp600","P4975Zp550","P4975Zp600"]';
$array = json_decode($json, true);
foreach ($array as $value) {
    if (!preg_match('/^[PM]\d{3,5}Z[pm]\d{3,5}$/',$value)) {
        echo "Invalid value: $value<br>\n";
    }
}
$json='[“P4950Zp550”、“p4950zp575”、“P4950Zp600”、“P5000Zp550”、“p5000zp575”、“P5000Zp600”、“P4975Zp550”、“P4975Zp600”];
$array=json_decode($json,true);
foreach($array作为$value){
如果(!preg_match('/^[PM]\d{3,5}Z[PM]\d{3,5}$/',$value)){
echo“无效值:$value
\n”; } }

试图用regexp解析原始JSON是个坏主意。

看看这是否有帮助

(\"[PM]\d{3,5}Z[pm](\,)?\d{3,5}\"(\,)?)*
在这里,表达式包含在
()*
中,它对内部表达式进行分组,并查找内部组中出现的任意次数(
*
)。如果您愿意,也可以将方括号包括在内

看看这是否有帮助

(\"[PM]\d{3,5}Z[pm](\,)?\d{3,5}\"(\,)?)*

在这里,表达式包含在
()*
中,它对内部表达式进行分组,并查找内部组中出现的任意次数(
*
)。如果您愿意,也可以将方括号包括在内

如果您确实非常希望在8元素数组仍然是json字符串的情况下在一次过程中验证它,您可以使用以下方法:

模式:
~^\[“[PM]\d{3,5}Z[PM]\d{3,5}(?”,“[PM]\d{3,5}Z[PM]\d{3,5}{7}]$~

--这与第一个匹配,然后与后面的七个匹配;都包好了

代码()


有时,您只需要批量验证输入

如果您确实非常希望在8元素数组仍然是json字符串的情况下在一次过程中验证它,您可以使用以下方法:

模式:
~^\[“[PM]\d{3,5}Z[PM]\d{3,5}(?”,“[PM]\d{3,5}Z[PM]\d{3,5}{7}]$~

--这与第一个匹配,然后与后面的七个匹配;都包好了

代码()


有时,您只想批量验证输入

不清楚您想做什么。你的真实数据是什么?给出一个更真实的示例输入。最好是解码JSON,而不是解析原始文本。可能存在一些您无法轻松处理的逃避。顺便说一句,您可以使用
[PM]
而不是
(P | M)
\d
而不是
[0-9]
。您不需要编写
{1}
,除非添加一个量词,否则所有内容都只匹配一次。您还应该添加
^
$
锚定,以便匹配整个字符串。使用
foreach
循环在数组的每个元素上应用regexp,而不是写8次,你不清楚你想做什么。你的真实数据是什么?给出一个更真实的示例输入。最好是解码JSON,而不是解析原始文本。可能存在一些您无法轻松处理的逃避。顺便说一句,您可以使用
[PM]
而不是
(P | M)
\d
而不是
[0-9]
。您不需要编写
{1}
,除非添加一个量词,否则所有内容都只匹配一次。您还应该添加
^
$
锚定,以便匹配整个字符串。使用
foreach
循环在数组的每个元素上应用regexp,而不是将其写入8次。为什么有
(\,)?
在regexp中?带逗号的项目不符合他描述的模式,它们不应该通过验证。这就是他的提问风格缺乏清晰性的原因。:)你可以接受它,你应该一切都好。要我把它拿出来吗?为什么在regexp中有
(\,)?
?带逗号的项目不符合他描述的模式,它们不应该通过验证。这就是他的提问风格缺乏清晰性的原因。:)你可以接受它,你应该一切都好。我把它拿出来好吗?