preg_match输入验证豁免

preg_match input validation exemption

提问人:Claschy 提问时间:11/15/2023 最后编辑:Nigel RenClaschy 更新时间:11/15/2023 访问量:50

问:

我有一个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;
}
php 正则表达式 验证 preg-match

评论

1赞 CBroe 11/15/2023
关键词: Negative Lookbehind
0赞 The fourth bird 11/15/2023
用单词边界阻止 MT,然后匹配哪个将是“无效数字”\bM[GT]\d+\bPMT1[A-Z]+\d+

答:

0赞 Vincent Decaux 11/15/2023 #1

您可以尝试使用此正则表达式:

((?<!P)MT|GT)(\d+)

(?<!P)是一个否定的后视断言,用于检查“MT”前面是否没有“P”。

这样,只有当“MT”前面没有“P”时,它才会匹配。因此,“PMT”不会被阻止,但只有“MT”将被阻止。