我目前有一个coldfusion的正则表达式,检查字符串是否是字母数字。 我想多打开一段时间以允许句号和下划线字符。我将如何修改这个以允许?Coldfusion的正则表达式问题
<cfset isValid= true/>
<cfif REFind("[^[:alnum:]]", arguments.stringToCheck, 1) GT 0>
<cfset isValid= false />
</cfif>
感谢
我目前有一个coldfusion的正则表达式,检查字符串是否是字母数字。 我想多打开一段时间以允许句号和下划线字符。我将如何修改这个以允许?Coldfusion的正则表达式问题
<cfset isValid= true/>
<cfif REFind("[^[:alnum:]]", arguments.stringToCheck, 1) GT 0>
<cfset isValid= false />
</cfif>
感谢
这应该这样做。
<cfset isValidString= true/>
<cfif REFind("[^[:alnum:]_\.]", arguments.stringToCheck, 1) GT 0>
<cfset isValidString= false />
</cfif>
而且使用“的isValid”为变量名是不是一个伟大的实践。它是ColdFusion中的一个函数的名称,可能会在某一天导致您的问题。
将这项工作吗?
refind("[\w\d._]","1234abcd._")
'\ w'已经包含'\ d'和'_',并且您已经错过了Cheeky否定该组(为了识别无效字符串)。 – 2010-09-21 12:41:42
啊你是对的彼得。感谢您注意到这一点。 – Masterbuddha 2010-09-21 23:33:27
无需CFIF - 这里是这样做的一个很好的简洁的方式:
<cfset isValidString = NOT refind('[^\w.]' , Arguments.StringToCheck)/>
或者,你可以这样来做:
<cfset isValidString = refind('^[\w.]*$' , Arguments.StringToCheck) />
(为了防止空字符串,将*
更改为+
)
此方法可以使它更容易应用其他约束(例如,必须以字母等开头),并且无论如何都是表达原始支票的稍微更直接的方式。
请注意,这里的^
是一个意思是“行首/字符串”(其中$
为相应结尾),more information here的锚。
个人而言,我更愿意写出a-z0-9而不是使用\ w,因为它是一种更直观的表示形式,但是很好的解释。 – 2010-09-21 14:17:39
不应该是'
谢谢乔丹,我知道有些事情不太对,但显然不是直的 - 是的,它应该是'(x EQ 0)' - 或者简单地在NOT的前面加上'NOT',这也是更简单/更清晰的。 – 2010-09-21 17:53:56
谢谢贾森 - 那就像一颗炸弹。至少我还可以添加额外的字符,如果需要使用\字符。 关于'isValid' - 你100%正确。它原本是'isAlphaNumeric',但我认为这不会在这个例子的要求,因此我改变了这个例子在线没有思考! – Cheeky 2010-09-21 08:54:27
在'.'之前你不需要\并且使用'\ w'将会包含'[A-Za-z0-9_]'并且比'[[:alnum:]]'东西更普遍,所以可以简单地考虑改为'[^ \ w。]'。 – 2010-09-21 12:40:41
嗨,彼得。并包括下划线?那么它会是[^ \ w._]吗? – Cheeky 2010-09-21 14:46:44