【问题标题】:CFFORM Regex won't validate properlyCFFORM Regex 无法正确验证
【发布时间】:2013-11-11 20:21:29
【问题描述】:

我有一个旧表单,它仍然必须使用 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,}+$

关于为什么这不能满足我的要求的任何想法?

【问题讨论】:

    标签: regex validation coldfusion cfform


    【解决方案1】:

    “关于为什么这不能满足我的要求的任何想法?”

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

    您的错误是您要么将两个量词放在一起,要么可能已经看到所谓的所有格量词并尝试使用它,(但 JS 不支持它们)。

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


    简要说明所有格量词与其他类型的比较:

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

    同样,JS 和 CF 使用的正则表达式实现不支持所有格量​​词(因此为什么语法无效),但它们确实支持贪婪(默认)和惰性。

    占有欲和贪婪之间的区别可能看起来很微妙——对于你所拥有的单项模式来说,它实际上并没有生效——但它可以在执行过程中产生非常显着的差异......但这已经偏离了跟踪核心答案,所以我会在这里停下来。

    【讨论】:

      猜你喜欢
      • 2021-06-15
      • 2015-10-27
      • 1970-01-01
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-15
      • 2014-10-25
      相关资源
      最近更新 更多