2010-09-21 54 views
4

我目前有一個coldfusion的正則表達式,檢查字符串是否是字母數字。 我想多打開一段時間以允許句號和下劃線字符。我將如何修改這個以允許?Coldfusion的正則表達式問題

<cfset isValid= true/> 
<cfif REFind("[^[:alnum:]]", arguments.stringToCheck, 1) GT 0> 
<cfset isValid= false /> 
</cfif> 

感謝

回答

3

這應該這樣做。

<cfset isValidString= true/> 
    <cfif REFind("[^[:alnum:]_\.]", arguments.stringToCheck, 1) GT 0> 
    <cfset isValidString= false /> 
</cfif> 

而且使用「的isValid」爲變量名是不是一個偉大的實踐。它是ColdFusion中的一個函數的名稱,可能會在某一天導致您的問題。

+0

謝謝賈森 - 那就像一顆炸彈。至少我還可以添加額外的字符,如果需要使用\字符。 關於'isValid' - 你100%正確。它原本是'isAlphaNumeric',但我認爲這不會在這個例子的要求,因此我改變了這個例子在線沒有思考! – Cheeky 2010-09-21 08:54:27

+1

在'.'之前你不需要\並且使用'\ w'將會包含'[A-Za-z0-9_]'並且比'[[:alnum:]]'東西更普遍,所以可以簡單地考慮改爲'[^ \ w。]'。 – 2010-09-21 12:40:41

+0

嗨,彼得。幷包括下劃線?那麼它會是[^ \ w._]嗎? – Cheeky 2010-09-21 14:46:44

0

將這項工作嗎?

refind("[\w\d._]","1234abcd._") 
+0

'\ w'已經包含'\ d'和'_',並且您已經錯過了Cheeky否定該組(爲了識別無效字符串)。 – 2010-09-21 12:41:42

+0

啊你是對的彼得。感謝您注意到這一點。 – Masterbuddha 2010-09-21 23:33:27

4

無需CFIF - 這裏是這樣做的一個很好的簡潔的方式:

<cfset isValidString = NOT refind('[^\w.]' , Arguments.StringToCheck)/> 


或者,你可以這樣來做:

<cfset isValidString = refind('^[\w.]*$' , Arguments.StringToCheck) /> 

(爲了防止空字符串,將*更改爲+

此方法可以使它更容易應用其他約束(例如,必須以字母等開頭),並且無論如何都是表達原始支票的稍微更直接的方式。

請注意,這裏的^是一個意思是「行首/字符串」(其中$爲相應結尾),more information here的錨。

+0

個人而言,我更願意寫出a-z0-9而不是使用\ w,因爲它是一種更直觀的表示形式,但是很好的解釋。 – 2010-09-21 14:17:39

+0

不應該是''否則你說它是有效的,如果它包含一個字符** other **比字母數字或句點。 – 2010-09-21 16:33:22

+0

謝謝喬丹,我知道有些事情不太對,但顯然不是直的 - 是的,它應該是'(x EQ 0)' - 或者簡單地在NOT的前面加上'NOT',這也是更簡單/更清晰的。 – 2010-09-21 17:53:56