У меня есть эта функция для генерации слизней в Coldfusion:Coldfusion регулярное выражение для генерации слизняка
<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>
Но это выход мне этот слизняк:
это-это-строка-ABCDE-aaaaaaeeeeiiiioooouuu-уна-нет-nnnnnnnnnnnnn
кажется, что все акцентированные символы правильно заменены, но эта функция вставляет «-» после их замены. Зачем?
Где ошибка?
PD: я ожидал этого выход:
this-is-a-string-abcde-aaaaaa-eeee-iiii-oooo-uuuu-n-ano-nnnnnnnnnnnnn
Спасибо.
какой результат вы ожидаете от вышеуказанной функции? –
затем удалите ' ' part –
rock321987
Я подражал вашему примеру в python, и я не думаю, что эта часть нужна, если вы ожидаете как вывод правильный – rock321987