我正在尝试使用http://regexlib.com/中找到的正则表达式来验证表单。我想要做的是过滤掉除a-z,逗号和撇号之外的所有字符。如果我使用此代码:
<cfinput name="FirstName" type="text" class="fieldwidth" maxlength="90" required="yes" validateat="onsubmit,onserver" message="Please ensure you give your First Name and it does not contain any special characters except hyphens or apostrophes." validate="regular_expression" pattern="^([a-zA-Z'-]+)$" />
我收到以下错误:表达式中不匹配[]。我发现这与撇号有关,因为如果我使用这段代码它会起作用(但不允许使用撇号):
<cfinput name="FirstName" type="text" class="fieldwidth" maxlength="90" required="yes" validateat="onsubmit,onserver" message="Please ensure you give your First Name and it does not contain any special characters except hyphens or apostrophes." validate="regular_expression" pattern="^([a-zA-Z-]+)$" />
所以我想知道在使用正则表达式时是否有一些特殊的方法来转义撇号?
修改
我想我已经找到问题的原因(感谢xanatos),不知道如何修复它。基本上CF正在生成一个隐藏字段来验证字段,如下所示:
<input type='hidden' name='FirstName_CFFORMREGEX' value='^([a-zA-Z'-]+)$'>
因为它使用单个撇号而不是围绕值的语音标记,所以它将撇号解释为值的结尾。
答案 0 :(得分:7)
我认为cfinput实现中存在一个错误。它可能使用您在Javascript Regex中传递模式的字符串,但它使用'
来引用它。所以它将其转换为:
new Regex('^([a-zA-Z'-]+)$')
尝试用\x27
替换引号(这是单引号的代码)
答案 1 :(得分:0)
不匹配]是因为连字符被视为表示它周围两个字符之间的范围。将连字符放在开头作为最佳实践。
^([-a-zA-Z']+)$