[英]Regular Expression Dynamic Format
有人可以幫助我使用正則表達式檢查刺痛:
My String將以任何格式顯示
12AAA22TBI
上述Sting的格式為NNTTTNNTTT
哪里
N - 數字,T - TEXT
我能夠編寫一個代碼來檢查靜態格式。 但格式將變得動態。
假設第二種情況可能是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
以上是一些例子。
使用下面的示例代碼作為開始......
$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";
我創建了一個生成正則表達式的簡單函數,您可以簡單地添加規則來支持其他字符並將它們映射到特定的正則表達式:
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]$~
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.