php preg_match输入验证豁免

jgwigjjp  于 2023-11-16  发布在  PHP
关注(0)|答案(1)|浏览(115)

我有一个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;
}

字符串

h43kikqp

h43kikqp1#

你可以尝试使用这个正则表达式:

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

字符串
(?<!P)是一个否定的lookbehindAssert,它检查'MT'前面是否没有'P'。
这样,'MT'只有在前面没有'P'的情况下才会被匹配。因此,'PMT'不会被阻止,但'MT'单独会被阻止。

相关问题