2010-06-08 8 views
2

나는 sql을 사용하여 신용 카드 번호를 xxxx로 바꾸고 REGEX_REPLACE가 모든 것을 일관되게 대체하지 않는다는 것을 알았습니다. 다음은 신용 카드 번호 바꾸기

엘리자베스는

후를 address.5430-6000-2111-1931 변경 aclled

전에 내가 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') 

에 사용하고 SET 명령은

엘리자베스가 주소 XXXXXXXXXXXXXXXX1 A로 변경되었습니다.

X의 수를 늘려 보았지만 결과는 같습니다. 나는 또한 첫 번째 X 앞에 하나의 문자를 왼쪽으로 이동하는 것처럼 공간을 넣어야 만한다는 것을 알게된다.

+0

다소 서식을 개선하기 위해 자유를 툭 http://www.regular-expressions.info/creditcard.html

당신은 "문서에 신용 카드 번호 찾기"단락을 읽어야 할 사람 : 그냥이 사이트에서이 정규식

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

발견 네가 괜찮 으면 좋겠다. – Skurmedel

+3

신용 카드 번호 데이터베이스를 이메일로 보내면 내가 할 수있는 일을 볼 수 있습니다 ...;) –

답변

5

정규식을 특정하게 만들지는 않습니다. 실수로 정규 표현식과 일치하지 않는 실수를 최종 사용자에게 전달하는 변경이 증가하게됩니다.

난 그냥이 같은 간단한 정규식을 사용 : BTW

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

: 왜 당신이 처음에 \ (D)가 포함 했습니까? 그. 신용 카드 번호의 일부가 아니지, 그렇지?

편집 :