2013-10-22 185 views
0

我們目前一直在使用來自cflib.org的UDF,雖然它是一個美妙的UDF,它改變了字符串的漂亮性,但我們似乎無法弄清楚如何讓它尾隨「。」在字符串的末尾輸入。正則表達式爲尾隨。在字符串的末尾

<cffunction name="friendlyURL" output="false" access="public" returntype="string" hint="returns a URL safe string"> 
<cfargument name="string" default="" type="string"> 
<cfscript> 
var returnString = arguments.string; 
var InvalidChars = "à,ô,d,?,ë,š,o,ß,a,r,?,n,a,k,s,?,n,l,h,?,ó,ú,e,é,ç,?,c,õ,?,ø,g,t,?,e,c,s,î,u,c,e,w,?,u,c,ö,è,y,a,l,u,u,s,g,l,ƒ,ž,?,?,å,ì,ï,?,t,r,ä,í,r,ê,ü,ò,e,ñ,n,h,g,d,j,ÿ,u,u,u,t,ý,o,â,l,?,z,i,ã,g,?,o,i,ù,i,z,á,û,þ,ð,æ,µ,e,À,Ô,D,?,Ë,Š,O,A,R,?,N,A,K,S,?,N,L,H,?,Ó,Ú,E,É,Ç,?,C,Õ,?,Ø,G,T,?,E,C,S,Î,U,C,E,W,?,U,C,Ö,È,Y,A,L,U,U,S,G,L,ƒ,Ž,?,?,Å,Ì,Ï,?,T,R,Ä,Í,R,Ê,Ü,Ò,E,Ñ,N,H,G,Ð,J,Ÿ,U,U,U,T,Ý,O,Â,L,?,Z,I,Ã,G,?,O,I,Ù,I,Z,Á,Û,Þ,Ð,Æ,?,E"; 
var ValidChars = "a,o,d,f,e,s,o,ss,a,r,t,n,a,k,s,y,n,l,h,p,o,u,e,e,c,w,c,o,s,o,g,t,s,e,c,s,i,u,c,e,w,t,u,c,oe,e,y,a,l,u,u,s,g,l,f,z,w,b,a,i,i,d,t,r,ae,i,r,e,ue,o,e,n,n,h,g,d,j,y,u,u,u,t,y,o,a,l,w,z,i,a,g,m,o,i,u,i,z,a,u,th,dh,ae,u,e,A,O,D,F,E,S,O,A,R,T,N,A,K,S,Y,N,L,H,P,O,U,E,E,C,W,C,O,S,O,G,T,S,E,C,S,I,U,C,E,W,T,U,C,Oe,E,Y,A,L,U,U,S,G,L,F,Z,W,B,A,I,I,D,T,R,Ae,I,R,E,Ue,O,E,N,N,H,G,D,J,Y,U,U,U,T,Y,O,A,L,W,Z,I,A,G,M,O,I,U,I,Z,A,U,TH,Dh,Ae,U,E"; 
// trim the string 
returnString = Trim(returnString); 
returnString = StripCR(returnString); 
// replace known characters with the corresponding safe characters 
returnString = ReplaceList(returnString,InvalidChars,ValidChars); 
// replace unknown characters in the x00-x7F-range with x's 
returnString = returnString.ReplaceAll('[^\x00-\x7F]','x'); 
// Replace one or many comma with a dash 
returnString = returnString.ReplaceAll(',+', '-'); 
// Other substitutions 
returnString = Replace(returnString, "%", "percent","ALL"); 
returnString = Replace(returnString, "&amp;", " and ","ALL"); 
returnString = Replace(returnString, "&", " and ","ALL"); 
returnString = returnString.ReplaceAll('[:,/]', '-'); 
// Replace one or more whitespace characters with a dash 
returnString = returnString.ReplaceAll('[\s]+', '-'); 
// And everything else simply has to go 
returnString = returnString.ReplaceAll('[^A-Za-z0-9\/-]',''); 
// finally replace multiple dash characters with just one 
returnString = returnString.ReplaceAll('-+','-'); 
// we're done 
return returnString; 
</cfscript> 
</cffunction> 

我正則表達式,心不是非常好,香港專業教育學院已經度過了它修補了幾個小時,但仍然不能似乎想出如何使之有一個結尾的「」如果輸入了一個。

回答

4
// And everything else simply has to go 
returnString = returnString.ReplaceAll('[^A-Za-z0-9\/-]',''); 

這將用空字符串替換不屬於該集合的任何字符。 嘗試在設定的末尾添加.字符:

returnString = returnString.ReplaceAll('[^A-Za-z0-9.-]',''); 

注:由於@PeterBoughton指出的,/正在取代-了,所以它並沒有成爲部分字符集。現在

,這將允許.字符的字符串的中間,你想,讓他們只在最後,所以你將不得不更換任何.字符是沒底。

returnString = returnString.replaceAll('\.(?!$)', ''); 

否則,你總是可以嘗試以匹配.接着是任意字符,使用反向引用該字符替換兩者。

returnString = returnString.replaceAll('\.(.)', '\1'); 
+0

你犯了同樣的錯誤。你想要''[^ A-Za-z0-9 \ /.-]''而不是''[^ A-Za-z0-9 \/- 。]''。 '-'必須是集合中的最後一個字符。 – pburka

+0

對;)沒有注意到有一個' - '字符hehe。固定! – plalx

+0

當然,如果連字符被遺漏了,定位就不成問題。另外,'/'不需要轉義 - 儘管假設先前的一行將所有的'/'轉換爲'--'它的冗餘,所以可能只是'[^ A-Za-z0-9 \ - 。]' –

1

此行

// And everything else simply has to go 
    returnString = returnString.ReplaceAll('[^A-Za-z0-9\/-]',''); 

除去一切這是不A-Za-z0-9/,或-

[]括號內包含可匹配的字符列表,而^表示「不」)。

你應該只能夠添加.到列表:

// And everything else simply has to go 
    returnString = returnString.ReplaceAll('[^A-Za-z0-9\/.-]',''); 

(作爲@Leigh暗示下面的.必須在最後-之前,否則將被視爲一個範圍)

+0

將'.'結尾添加*「不允許在字符串」*「的**結尾**處有一個尾隨句點。另外,上面的表達式甚至沒有編譯。 – Leigh

+0

它當然會「允許在字符串末尾的尾隨句點」。 – pburka

+0

那麼它現在沒有做任何事情,因爲它不編譯;)但我的意見是OP想讓它*只*在字符串的末尾。 {聳肩}我可能是錯的。 (編輯)沒關係,我看到它被編輯來修復編譯錯誤。 – Leigh

相關問題