Dobra więc z mojej obserwacji wynika:
1. Ręczna edycja pola pf_input_format w tabeli pfields_data, bo przez panel zamienia nam część znaków.
2. Edycja pliku ./ips_kernel/classCustomFields.php
/* Format Restriction */
if( $field['restrictions']['format'] && $submit_value )
{
$regex = str_replace( 'n', '\\d', preg_quote( $field['restrictions']['format'], "#" ) );
$regex = str_replace( 'a', '\\w', $regex );
if ( ! preg_match( "#^".$regex."$#i", $submit_value ) )
{
$errors[ 'field_' . $field['id'] ][] = 'invalid';
}
}
Zamiana:
$regex = str_replace( 'n', '\\d', preg_quote( $field['restrictions']['format'], "#" ) );
na:
$regex = str_replace( 'n', '\\d', $field['restrictions']['format'] );
No i teraz działa. Szkoda że IP.Board nie ma wbudowanej opcji stosowania od razu wyrażenia regularnego w panelu, bez takich manewrów.