簡體   English   中英

正則表達式動態格式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM