2012-09-06 2 views
0

아래 기능을 수정하는 데 도움이 필요합니다. 현재이 함수는 문자열에 중복 된 이름이 있는지 확인합니다. 중복이 발견되면 자동으로 -number 즉를 추가합니다. 123456-2. 그러나 내 문자열에 이미 숫자와 대시가있는 경우에는 발생하지 않을 마지막 숫자 만 증가시킵니다. 즉. 123456-2012 to 123456-2013 여기서 문자열은 123456-2012-2입니다. 그것을 고칠 수있는 방법에 관한 어떤 생각?문자열의 대시

function test() { 

var filename = "123456-2012" 

var x = confirm('Duplicate record found!\n\n \''+filename+'\' \n\n rename and add record to the databse as:\n\n \''+new_name(filename)+'\'') 

    if (x == true) { 

    alert("adding...") 
    filename = new_name(filename) 
    alert(filename) 
    } 

    else { return } 

} 

var exists = 0 
function file_exists(name) { 
    exists = 1 - exists 
    return exists 
} 

function new_name(suggested) { 

    if (!file_exists(suggested)) { return suggested } 

    var have_index = suggested.match(/^(.+)\-(\d+)$/) 
    var unused_index 
    if (have_index && have_index[2]) { 
     base = have_index[1] 
     unused_index = ++have_index[2] 
    } else { 
     base = suggested 
     unused_index = 2 
    } 

    while (file_exists(base + "-" + unused_index)) { unused_index++ } 

    return base + "-" + unused_index 

} 
+1

는 프로그래밍이 아닌 마법이다. ''123-45 ''와''123-45 ''사이에는 논리적 인 차이가 없습니다 (파일 이름에 미리 대시가 있고 "123"의 45 번째 버전 인 척하는 것). – Pete

+3

나는 나의 점 123456-2012 "'과'파일의 2012th 버전"123456 "파일'의 첫 번째 인스턴스 사이의 차이가 무엇"인지 확인하기 위해 더 나은 방법을 생각 "'은?" – Pete

답변

1

은 NEW_NAME 기능에 나는 경우 상태 !have_index[2]을 추가 한

공지 사항을 다음과 같이 변경 작업을 수행합니다.

if (have_index && !have_index[2]) { 
     base = have_index[1] 
     unused_index = ++have_index[2] 
    } else { 
     base = suggested 
     unused_index = 2 
    } 
+0

위대한 작품! 정말 고맙습니다. –