2010-09-21 53 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