0

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

我的字符串将采用任何格式让我们看看

12AAA22TBI

上面的 Sting 格式为NNTTTNNTTT

在哪里

N - 数字,T - 文本

我可以编写代码来检查静态格式。但格式将是动态的。

假设第二种情况可能是123456TTT = NNNNNNTTT 格式会不同。有人可以帮我写一个具有动态值的正则表达式吗?

注意:字符串的长度以及 FORMAT 的长度会发生变化。

伪代码:

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

以上是一些例子。

4

2 回答 2

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";

在这里测试一下。

于 2013-11-11T20:33:21.177 回答
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]$~
于 2013-11-11T20:39:58.640 回答