2012-09-06 116 views
0

我需要您的帮助才能修改下面的以下功能。目前该函数检查字符串中是否有重复的名称。如果发现重复,它会自动添加-number即。 123456-2。但是,如果我的字符串已经有一个数字和短划线,它只会增加最后一个不应该发生的数字。即。 123456-2012至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“的第一个实例和文件”123456“的第二个2012版本”有什么区别?“ – Pete

回答

1

执行以下操作改变你new_name的功能,我在if条件加入!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

很棒!非常感谢。 –

相关问题