2014-09-24 46 views
3

我們遇到安全問題,數據庫中的特定字段中包含一些敏感信息。我需要一種方法來檢測長度在2到8之間的數字,用相同長度的「填充符」替換數字。使用正則表達式替換長度爲2到8之間的數字,並使用特定字符

例如:

Jim8888Dandy 
Mike9999999999Thompson * Note: this is 10 in length and we don't want to replace the digits 
123Area Code 
Tim Johnson5555555 

在這種情況下,任何時候,我們發現一個數字,是2和8(含)之間的話,我想更換/填充/替代品編號爲0值,並保持長原來的數字

最終結果

Jim0000Dandy 
    Mike9999999999Thompson 
    000Area Code 
    Tim Johnson0000000 

有一種簡單的方式來完成這項使用正則表達式?

+0

你想在SQL Server或代碼中這樣做嗎? – Szymon 2014-09-24 23:43:41

+0

純粹的正則表達式是不可行的,因爲這些工具不是用來「計數」的。然而,在你的編程語言中,你可以做一些類似'\ d {2,8}'的匹配,然後用一個回調函數替換匹配數字的長度。 – Sam 2014-09-24 23:44:04

+0

@Szymon任何事情都是最簡單的說實話。 – kirkdmo 2014-09-24 23:45:58

回答

2

您需要提供一個靜態評估器方法來進行替換。它取代數字在比賽中以零:

public static string Evaluate(Match m) 
{ 
    return Regex.Replace(m.Value, "[0-9]", "0"); 
} 

然後用這個代碼中使用它:

string input = "9999999099999Thompson534543"; 
MatchEvaluator evaluator = new MatchEvaluator(Program.Evaluate); 
string replaced = Regex.Replace(input, "(?:^|[^0-9])[0-9]{2,8}(?:$|[^0-9])", evaluator); 

的正則表達式是:

  • (?:^|[^0-9]) - 應該是在開始或preceeded以非數字
  • [0-9]{2,8} - 捕獲2位和8位數字
  • (?:$|[^0-9]) - 應該在最後或非數字
+0

這非常接近。這似乎是從湯普森削減「n」這裏是結果:9999999099999Thompso000000,注意「n」缺失。 – kirkdmo 2014-09-25 00:07:28

+1

@kdunlapmo你是對的。我改變了代碼來迎合這一點。 – Szymon 2014-09-25 01:57:09

0

只爲聰明的正則表達式部門。這不是一個有效的正則表達式。

(?<=(?>(?'front'\d){0,7}))\d(?=(?'back'(?'-front'\d)){0,7}(?!\d))((?'-front')|(?'-back')) 

替換爲0

/(?<=(?>(?'front'\d){0,7})) # Measure how many digits we're behind. 
    \d # This digit is matched 
    (?= 
    (?'back' # Measure how many digits we're in front of. 
     (?'-front'\d)){0,7} 
     # For every digit here, subtract one group from 'front', 
     # As to assert we'll never go over the < 8 digit requirement. 
    (?!\d) # no more digits 
) 
(
    (?'-front') # At least one capturing group left for 'front' or 'back' 
|(?'-back') # for > 2 digits requirement. 
)/x 
+0

我試圖此使用RegEx好友,這是結果(基於上面的例子) Jim8800Dandy Mike9999900000Thompson 100Area代碼 添Johnson5550000 哪個是錯誤 – kirkdmo 2014-09-24 23:58:50

+0

@kdunlapmo我已經添加的原子團。 – Unihedron 2014-09-25 00:00:51

相關問題