【问题标题】:Assign Regex object to html input pattern将 Regex 对象分配给 html 输入模式
【发布时间】:2013-03-19 02:57:25
【问题描述】:

我需要以编程方式将正则表达式对象分配给输入元素模式属性。 以下是我目前的实现:

var regex = /\d{5}/;
element.attr("pattern", regex.toString().slice(1,-1);

有没有更好的方法可以在不进行字符串操作的情况下做到这一点?

【问题讨论】:

  • 您是否将regex 对象用于其他用途?如果不是,您显然可以直接使用element.attr("pattern","\\d{5}") 分配字符串。
  • RegExp 实例有一个 source property 包含它们的文本,所以 /\d{5}/.source === "\\d{5}"
  • @nnnnnn — 不需要引用反斜杠,\d{5} 应该这样做(在 Firefox 中也是如此)。
  • 如果你使用的是html5为什么不使用数据api
  • @RobG - 在字符串文字中(如我之前的评论),您需要转义反斜杠,包括在 FF 中。在正则表达式文字中,您不会转义反斜杠。 (我知道你知道这个……)

标签: javascript regex html


【解决方案1】:

RegExp 实例有一个 source property,其中包含它们的文本:

源属性的值是表示当前正则表达式的Pattern形式的String。

因此

/\d{5}/.source === "\\d{5}"

因此您的代码可以更改为

var regex = /\d{5}/;
element.setAttribute("pattern", regex.source);

【讨论】:

    【解决方案2】:

    如果您使用 jQuery,请使用 prop 而不是 attr。因为在较新版本的 jQuery 中,attr 是只读的,prop 是读/写的。

    element.prop('pattern', regex.toString().slice(1,-1));
    

    【讨论】:

    • .data() 方法是什么?如果您打算使用 jQuery,则可以将正则表达式直接保存为对象...
    • 我看不出有什么问题。设置数据属性比设置元素属性更好
    • @mkoryak - OP 询问了 html5 的 pattern 属性,它实际上对输入元素的行为有影响。将其更改为非属性数据属性没有帮助。
    • 你为什么假设 jQuery?它不是标签,也不是问题或代码。
    • 不知道“html5 模式”属性。学到了一些东西。
    猜你喜欢
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 2011-01-25
    • 2019-11-06
    相关资源
    最近更新 更多