提问人:Claschy 提问时间:11/15/2023 最后编辑:Nigel RenClaschy 更新时间:11/15/2023 访问量:50
preg_match输入验证豁免
preg_match input validation exemption
问:
我有一个preg_match函数,我想阻止“MT”,但允许“PMT”。 我将如何修改它以使其工作,因为它目前正在 PMT 中拾取 MT? 谢谢!
function wppbc_custom_input_validation($message, $field, $request_data, $form_location) {
if ($field['field'] == 'Input' && $field['meta-name'] == 'input_field') {
$field_data = $request_data[$field['meta-name']];
if (preg_match('/(MT|GT)(\d+)/i', $field_data) === 1) {
return 'Not allowed.';
}
if (preg_match('/[A-Z]+\d+/i', $field_data) === 0) {
return 'Invalid number';
}
}
return $message;
}
答:
0赞
Vincent Decaux
11/15/2023
#1
您可以尝试使用此正则表达式:
((?<!P)MT|GT)(\d+)
(?<!P)
是一个否定的后视断言,用于检查“MT”前面是否没有“P”。
这样,只有当“MT”前面没有“P”时,它才会匹配。因此,“PMT”不会被阻止,但只有“MT”将被阻止。
评论
\bM[GT]\d+\b
PMT1
[A-Z]+\d+