2013-11-11 2 views
0

Может кто-нибудь помочь мне в проверке жалом, используя регулярное выражение:Regular Expression Dynamic Формат

Моя строка будет в любом формате позволяет увидеть

12AAA22TBI

выше Стинг в формате NNTTTNNTTT

Где

N - число, T - ТЕКСТ

Я могу написать код для проверки формата в статике. Но формат будет динамичным.

Предположим, что второй случай может быть 123456TTT = NNNNNNTTT Формат будет другим. Может ли кто-нибудь помочь мне написать обычный экспресс с динамическим значением;

Примечание: Длина строки, а также длина ФОРМАТ изменится.

псевдокод:

Function ('FORMAT','STRING'){ 
IF(FORMAT == STRING): Return 1; 
ELSE Return 0; 
} 

FORMAT == STRING Здесь мне нужна помощь, чтобы проверить формат и строку, используя регулярное выражение, но динамически.

Пример: Моя функция будет тот же, но формат и строка будет отличаться:

1. NNNTTTNN -- 111ABC22 
2. TNTNTNTN -- A1B2C3D4 
3. TTTTNNNNN -- ABCD12345 
4. TTNNTTTTTT -- AB01ABCDEF 

Выше некоторые из примеров.

+0

Вы спрашиваете «* как конвертировать' NNTTTNN' в регулярное выражение? * "Или что-то еще? – DCoder

+0

Да, но здесь NNTTTNN будет динамическим, например TTTTNNNTT, он может изменить позицию, но нам нужно проверить формат относительно формата. в строке .. – TomPHP

+1

Пожалуйста, добавьте несколько примеров - ввод и вывод – i100

ответ

2

Используйте пример кода ниже, как начать ...

$format = 'NNTTTNNTTT'; 
$value = '12AAA22TBI'; 

$format = preg_replace('/[^NT]/', '', $format); 
$format = preg_replace('/T/', '[A-Z]', $format); 
$format = preg_replace('/N/', '\d', $format); 
$format = "/^$format$/"; 

$match = (preg_match($format, $value)); 

print "$match\n"; 

Попробуй here.

0

Я создал простую функцию, которая генерирует регулярное выражение, вы можете просто добавить правила для поддержки других символов и сопоставить их с конкретным регулярным выражением:

function generateRegex($input){ 
    $rules = array(
     'N' => '[0-9]', 
     'T' => '[a-zA-Z]', 
     // You could add more rules here 
    ); 
    $delimiter = '~'; 

    $output = strtr($input, $rules); // Replace-Fu 
    $output = '^' . $output . '$'; // Add begin and end anchor, comment this line out if you don't want it. 
    $output = $delimiter . $output . $delimiter; // Add the delimiters 
    return $output; // Should I explain o_O ? 
} 

Демонстрационный:

$inputArr = array('NNNTTTNN','TNTNTNTN','TTTTNNNNN','TTNNTTTTTT'); 
foreach($inputArr as $input){ 
    echo $input . '->' . generateRegex($input) . '<br>'; 
} 

Выход:

NNNTTTNN -> ~^[0-9][0-9][0-9][a-zA-Z][a-zA-Z][a-zA-Z][0-9][0-9]$~ 
TNTNTNTN -> ~^[a-zA-Z][0-9][a-zA-Z][0-9][a-zA-Z][0-9][a-zA-Z][0-9]$~ 
TTTTNNNNN -> ~^[a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z][0-9][0-9][0-9][0-9][0-9]$~ 
TTNNTTTTTT -> ~^[a-zA-Z][a-zA-Z][0-9][0-9][a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z]$~ 
+0

Помощник Downvoter, чтобы объяснить? – HamZa