CFFORM Regex无法正确验证

时间:2013-11-11 20:21:30

标签: regex validation coldfusion cfform

我有一个旧表单,仍然必须使用cfform进行客户端验证。

我还有一个正则表达式模式用于验证,我试图验证电话号码字符串。

<cfinput class="form-field" required="yes" value="#session.userdetails.shipping.deliveryaddress.telephoneNumber#" message="Please Enter your Phone Number" name="telephoneNumber" type="text"  id="PhoneNumber" validate="regex" pattern="^[0-9\.\-' ']+$"  maxlength="25" size="26" />

我尝试了许多不同的模式来将字符串验证为特定格式。

我需要它至少7个字符 它可以包含空格 必须是数字

^[0-9\.\-' ']{7}+$
^[0-9\.\-' ']{7,}+$

关于为何不能验证我的要求的任何想法?

1 个答案:

答案 0 :(得分:0)

  

“关于为何不能验证我的要求的任何想法?”

因为您正在使用的正则表达式包含JS不支持的语法 - 如果您在浏览器控制台中查看,则在尝试验证时会看到错误。 (您可能需要选择“持久”选项才能看到它。)

你的错误在于你要么把两个量词放在一起,要么就已经看到了所谓的占有量词,并尝试使用它,(但JS并不支持它们)。

解决方案是简单地使用{7,}而不使用+ ,并且您的模式将几乎按预期工作:周围的引号不需要字符类中的空格(并且特别允许该字符),并且点不需要在字符类中转义 - 因此您想要的模式是^[0-9.\- ]{7,}$^[\d .-]{7,}$。 / p>


通过快速记录与其他类型相比的占有量词:

  • x{7,}是一个具有贪婪行为的量词,意味着它与x 尽可能多地匹配,但至少需要七次。
  • x{7,}+是一个具有占有行为的量词,意味着它匹配x 找到的次数,但至少需要七次。
  • x{7,}?是一个具有懒惰行为的量词,这意味着它会尝试匹配x七次,然后尽可能少地使用来成功匹配。
  • x+x{1,}的简写,您可以x++x+?更改默认的贪婪量词。

同样,JS和CF使用的正则表达式实现不支持占有量词(因此无效语法),但它们同时支持贪婪(默认)和懒惰。

占有欲和贪婪之间的区别可能看起来很微妙 - 对于单项模式而言,它实际上并没有实现 - 但它可以在执行中产生非常显着的差异......但是这种情况正在转向跟踪核心答案,所以我会在这里停下来。