2017-02-16 2 views
0

Следующая инструкция regex if не работает. Я хочу убедиться, что пользователь входит между 2-3 буквами, а затем между 7 - 11 номерами. в противном случае верните сообщение об ошибке.только разрешить форму для проверки правильности регулярного выражения

add_filter('gform_field_validation_1_44', 'tax_id_verif', 10, 4); 
    function tax_id_verif ($result, $value, $form, $field) 
    {$tax_regex = "/^[a-zA-Z]{2,3}\s?+[1-9]{7,12}$/g"; 
    $tax_match = preg_match($tax_regex, $value, $match); 
    if ($result != $tax_match) { 
    $result['is_valid'] = false; 
    $result['message'] = 'Please enter a correct tax ID'; 
    } 
    return $result; 
    } 
+1

Модификатор 'g' не поддерживается. Кроме того, '\ s? +' Соответствует 1 или 0 пробелам, возможно, вам просто нужно '\ s *'. Кроме того, '[1-9]' соответствует только цифрам от «1» до «9», он не будет соответствовать «0». Попробуйте '$ tax_regex ="/^ [a-zA-Z] {2,3} \ s * [0-9] {7,11} $/"' –

+0

'[1-9]' не будет соответствовать нулям , Я думаю, вы имеете в виду '[0-9]'. –

+0

[1-9] {7,12} будет совпадать между 7 и 11 номерами (кроме 0), возможно, вы хотели: '[0-9] {7,11}' (кстати, \ d - это то же самое, что и [0-9]) – dquijada

ответ

0

g модификатор не поддерживается PHP регулярных выражений. Кроме того, \s?+ соответствует 1 или 0 пробелам, вы можете использовать только \s*. Также [1-9] соответствует только цифрам от 1 до 9, это не соответствует 0. Если вам нужно сопоставить 7 к 1 цифр, используйте {7,11}, а не {7,12}.

Использование

$tax_regex = "/^[a-zA-Z]{2,3}\s*[0-9]{7,11}$/"; 

Если не должно быть никаких пробелов между буквами и цифрами, удалите \s*.