正则表达式动态格式

时间:2013-11-11 07:25:10

标签: php regex string logic expression

有人可以帮助我使用正则表达式检查刺痛:

My String将以任何格式显示

  

12AAA22TBI

上述Sting的格式为NNTTTNNTTT

其中

  

N - 数字,         T - TEXT

我能够编写代码来检查静态格式。但格式将变得充满活力。

假设第二种情况可能是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

以上是一些例子。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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]$~