有人可以帮助我使用正则表达式检查刺痛:
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
以上是一些例子。
答案 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]$~