2012-07-24 62 views
4

我想在ColdFusion中規範化一個字符串。在ColdFusion中規範化字符串

我想使用Java java.text.Normalizer類這一點,因爲CF沒有任何類似的功能。據我所知。

這裏是我當前的代碼:

<cfset normalizer = createObject("java", "java.text.Normalizer") /> 
<cfset string = "äéöè" /> 
<cfset string = normalizer.normalize(string, createObject("java", "java.text.Normalizer$Form").NFD) /> 
<cfset string = ReReplace(string, "\\p{InCombiningDiacriticalMarks}+", "") /> 
<cfoutput>#string#</cfoutput> 

任何想法,爲什麼它總是輸出äéöè,而不是一個標準化的字符串?

回答

8

在ColdFusion中,與Java不同,您不需要在字符串文字中轉義反斜槓。您當前的正則表達式不會匹配任何不以反斜槓開頭的內容,因此不會進行替換。

除此之外,你的代碼是完全正確的,你可以看到在輸出時字符串的長度是8而不是4。這是normalize呼叫的效果。

但是,請記住,它仍然是原始字符串的等效表示形式,因此您無法直觀地分辨差異並不奇怪。這是正確的Unicode渲染。

+0

非常感謝您的回答! – patrickruetter 2012-07-25 06:01:44

3

"\\p"應該被簡單地"\p"。比照的ReReplace()自動轉義反斜線給你,所以你"\\p"解釋Java方面如"\\\\p"

一個內膽:

<cfscript> 
var k = "mike's café"; 
k = createObject('java', 'java.text.Normalizer').normalize(k, createObject('java', 'java.text.Normalizer$Form').valueOf('NFD')).replaceAll('\p{InCombiningDiacriticalMarks}+','').replaceAll('[^\p{ASCII}]+',''); 
// k is now "mike's cafe" 
</cfscript> 

http://www.cfquickdocs.com/cf9/#rereplace

+0

獎金 - 我添加了一個'[^ \ p {ASCII}] +'去除非ascii字符。 – 2012-07-25 03:21:42

+0

謝謝,你也幫了我很多! – patrickruetter 2012-07-25 06:02:03