【发布时间】:2016-08-19 18:29:40
【问题描述】:
我有这个功能可以在 Coldfusion 中生成 slug:
<cffunction name="generateSlug" output="false" returnType="string">
<cfargument name="str">
<cfargument name="spacer" default="-">
<cfset var ret = "" />
<cfset str = lCase(trim(str)) />
<cfset str = reReplace(str, "[àáâãäå]", "a", "all") />
<cfset str = reReplace(str, "[èéêë]", "e", "all") />
<cfset str = reReplace(str, "[ìíîï]", "i", "all") />
<cfset str = reReplace(str, "[òóôö]", "o", "all") />
<cfset str = reReplace(str, "[ùúûü]", "u", "all") />
<cfset str = reReplace(str, "[ñ]", "n", "all") />
<cfset str = reReplace(str, "[^a-z0-9-]", "#spacer#", "all") />
<cfset ret = reReplace(str, "#spacer#+", "#spacer#", "all") />
<cfif left(ret, 1) eq "#spacer#">
<cfset ret = right(ret, len(ret)-1) />
</cfif>
<cfif right(ret, 1) eq "#spacer#">
<cfset ret = left(ret, len(ret)-1) />
</cfif>
<cfreturn ret />
</cffunction>
然后我用这个来称呼它:
<cfset stringToBeSlugged = "This is a string abcde àáâãäå èéêë ìíîï òóôö ùúûü ñ año ñññññññññññññ" />
<cfset slug = generateSlug(stringToBeSlugged) />
<cfoutput>#slug#</cfoutput>
但这是输出我这个蛞蝓:
this-is-a-string-abcde-a-a-a-a-a-a-e-e-e-e-i-i-i-o-o-o-o-u-u-u-u-n-a-no-n-n-n-n-n-n-n-n-n-n-n-n-n
似乎所有重音字符都已正确替换,但此函数在替换它们后插入了一个“-”。为什么?
哪里出错了?
PD:我期待这个输出:
this-is-a-string-abcde-aaaaaa-eeee-iiii-oooo-uuuu-n-ano-nnnnnnnnnnnnn
谢谢。
【问题讨论】:
-
您期望上述函数的输出是什么?
-
然后删除
<cfif left(ret, 1) eq "#spacer#"> <cfset ret = right(ret, len(ret)-1) /> </cfif> <cfif right(ret, 1) eq "#spacer#"> <cfset ret = left(ret, len(ret)-1) /> </cfif>部分 -
我在 python 中模仿了你的例子,如果你期望的输出是正确的,我认为不需要那部分
-
@rock321987 抱歉,但它不起作用。相同的输出,与预期不同:-(
-
在 cf10,11 和 2016 上正常工作。在 trycf.com 上测试。 trycf.com/gist/4f861b82a8c700e2d9dbefb896abb56e/…
标签: regex function coldfusion slug