更快的 PHP 正则表达式测试
A quicker PHP regex test
我需要清理通常采用
形式的传入 JSON
'["P4950Zp550","P4950Zp575","P4950Zp600","P5000Zp550","P5000Zp575","P5000Zp600","P4975Zp550","P4975Zp600"]'
每个 P|M
、p|m
之后的位数在 3 和 5 之间变化。json_decoding
然后应用测试
preg_match('/(P|M){1}[0-9]{3,5}Z(p|m){1}[0-9]{3,5}/',$value)
八次,在 foreach
循环中,(我总是在数组中有八个值)将是一件小事。但是,我想知道是否可能没有我可以编写的 Regex,它可以在一个 one 中执行此操作,而不必在传入字符串中先 json_decode
。我对 RegEx 的了解仅限于我在此处创建的正则表达式。
解码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 是个坏主意。
看看这是否有帮助
(\"[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}"]$~
Pattern Demo -- 这匹配第一个,然后是后面的七个;全部包裹得当。
代码 (Demo)
$string = '["P4950Zp550","P4950Zp575","P4950Zp600","P5000Zp550","P5000Zp575","P5000Zp600","P4975Zp550","P4975Zp600"]';
if (preg_match('~^\["[PM]\d{3,5}Z[pm]\d{3,5}(?:","[PM]\d{3,5}Z[pm]\d{3,5}){7}"]$~', $string)) {
echo "pass";
} else {
echo "fail";
}
// outputs: pass
有时,您只想批量验证输入
我需要清理通常采用
形式的传入 JSON'["P4950Zp550","P4950Zp575","P4950Zp600","P5000Zp550","P5000Zp575","P5000Zp600","P4975Zp550","P4975Zp600"]'
每个 P|M
、p|m
之后的位数在 3 和 5 之间变化。json_decoding
然后应用测试
preg_match('/(P|M){1}[0-9]{3,5}Z(p|m){1}[0-9]{3,5}/',$value)
八次,在 foreach
循环中,(我总是在数组中有八个值)将是一件小事。但是,我想知道是否可能没有我可以编写的 Regex,它可以在一个 one 中执行此操作,而不必在传入字符串中先 json_decode
。我对 RegEx 的了解仅限于我在此处创建的正则表达式。
解码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 是个坏主意。
看看这是否有帮助
(\"[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}"]$~
Pattern Demo -- 这匹配第一个,然后是后面的七个;全部包裹得当。
代码 (Demo)
$string = '["P4950Zp550","P4950Zp575","P4950Zp600","P5000Zp550","P5000Zp575","P5000Zp600","P4975Zp550","P4975Zp600"]';
if (preg_match('~^\["[PM]\d{3,5}Z[pm]\d{3,5}(?:","[PM]\d{3,5}Z[pm]\d{3,5}){7}"]$~', $string)) {
echo "pass";
} else {
echo "fail";
}
// outputs: pass
有时,您只想批量验证输入