javascript - 在 CF 的正则表达式中排除 $

标签 javascript regex coldfusion coldfusion-9

我正在处理一些不同的表单验证类型,但无法让我的愿望 list 上的所有项目正常工作。

我的 cfinput 代码是这样的(与常规表单输入的工作方式相同,并且有一些预装的 JavaScript 验证)

    <cfinput type="Text" name="negdays" 
        range="0,23" 
        pattern="^(([^0]{1})([0-9])*|(0{1}))?$" 
        message="Negative Days must be a number between 0 and 23" 
        required="No"  width="2" > 

这个应该而且确实排除了除 $ 之外我需要的所有内容。我很难阻止表单接受 $

另一个类似的例子是我想要一个范围并保持其数字,所以我混合了验证类型

    <cfinput type="text" name="achamount" 
        validate = "range,numeric" 
        range = "0,99999" 
        message="ACH Amount must be a range from 0 - 99999 and  numeric only" >

...并且它工作完美 - 除了一个问题:允许使用 $

所以我想也许我可以用这样的正则表达式添加它:

    <cfinput type="text" name="achamount" 
        validate = "range,numeric,regex" 
        range = "0,99999"  
        pattern="^\d" 
        message="ACH Amount must be a range from 0 - 99999 and  numeric only" > 

但我的模式当然只是将其限制为数字,我已经在这样做了。我需要我的模式来排除美元符号。但作为一个特殊 Angular 色,它的行为不像我想摆脱的其他东西。

有什么想法或建议吗?我尝试过的所有方法要么不起作用,要么破坏页面上的所有其他验证。

最佳答案

解决方案:仅匹配数字

您无需专门排除 $ - 仅允许数字,您只需确保每个字符都匹配 \d .

为此,您需要将正则表达式的开头和结尾锚定到输入的开头和结尾,这是通过正则表达式元字符 ^ 完成的和$分别。 (如果您需要使用这些字符中的任何一个作为文字,请在它们前面加上反斜杠。)


因此,对于 0 到 99999 之间的整数,您需要:

^\d{1,5}$


匹配 0 到 23 之间的整数的工作方式相同,但模式的中心部分需要很复杂,以确保您不会得到 24 或以上:

^(?:[03-9]|1\d?|2[0-3]?)$

这里的三种选择是: * [03-9]匹配除 1 或 2 之外的任何单个数字。 * 1\d?匹配 1 或 1 后跟任何数字。 * 2[0-3]?匹配 2,或 2 后跟最多 3 的任何数字。

(?: ..)是为了确保^$仍然适用于整个字符串。

(当然,您也可以只使用^\d{1,2}$,然后检查它是否小于24。)


奖励信息:不包括 Angular 色

如上所述,在这种情况下您不需要执行此操作,但如果您遇到确实需要排除 $ 的情况。 ,您可以使用负字符类来做到这一点:

^[^$]{1,5}$

或者使用否定前瞻:

^(?:(?!\$).){1,5}$

后一个有点复杂,但它具有更大的灵 active ,因此了解一下很有用。

前瞻是 anchor 的另一种形式(它在某个位置匹配,但不消耗它匹配的字符)。当用于附加了量词({1,5} 位)的项目时,您需要将这两个项目组合在一起才能正确应用。 (即,如果您只执行 (?!\$).{1,5} ,则只会检查第一个字符,而不是所有五个字符。)

请注意,在字符类 $ 之外必须转义为 \$以防止它具有“弦 anchor 结尾”的特殊含义。在字符类中,它只是一个常规字符。

(希望这个解释很清楚 - 如果进一步的信息或澄清有用,请告诉我。)

关于javascript - 在 CF 的正则表达式中排除 $,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13708867/

相关文章:

javascript - 使用 Javascript 旋转文本

javascript - 如何使用 javascript 在 <select> 标签中选择一个值?

javascript - #encodeForJavaScript()# 的 ColdFusion JavaScript 等效项

Coldfusion CFMAIL 和 sendgrid

javascript - 用javascript滚动?

javascript - 如何创建动态 Accordion ?

regex - 如何在 Scala 中删除两个特定字符之间的子字符串

python - 正则表达式忽略括号之间的数据

java - 正则表达式匹配任何数字,除非它是特定字符串的一部分

coldfusion - 循环使用空值的数组时出现元素未定义错误