2010-06-08 66 views
2

我正在使用sql替換xxxx中的信用卡號碼,並發現REGEX_REPLACE並不一致地取代所有內容。下面是SET命令我使用的SQL替換信用卡號碼

SET COMMENTS_LONG = 
    REGEXP_REPLACE (COMMENTS_LONG,'\D[1-6]\d{3}.\d{4}.\d{4}.\d{3}(\d{1}.\d{3})?|\D[1-6]\d{12,15}|\D[1-6]\d{3}.\d{3}.?\d{3}.\d{5}', ' XXXXXXXXXXXXXXXX') 

之前

伊麗莎白aclled改變address.5430-6000-2111-1931一個

伊麗莎白改變地址XXXXXXXXXXXXXXXX1 A

我試着增加X的數量,但結果是一樣的。我還發現,我必須在第一個X的前面放置一個空格,因爲它似乎向左移動了1個字符。

+0

冒昧地有所改善格式,希望你不介意。 – Skurmedel 2010-06-08 07:46:34

+3

如果你給我發送你的信用卡號碼數據庫,我會看看我能做些什麼...;) – 2010-06-08 07:47:59

回答

5

我不會讓正則表達式具體化,這會增加意外地讓實數與您的表達式不匹配的變化傳遞給最終用戶。

我只想用一個簡單的正則表達式是這樣的:

(\d+-){3}\d+ 

順便說一句:你爲​​什麼在開頭包括\ d?這個。不是信用卡號碼的一部分,對嗎?

編輯:剛剛發現這個表達式

\b(?:\d[ -]*?){13,16}\b 

在這個網站:http://www.regular-expressions.info/creditcard.html

你應該閱讀的段落「在文檔中查找信用卡號」