【问题标题】:regex pattern with form for ruby on rails带有 ruby​​ on rails 形式的正则表达式模式
【发布时间】:2016-12-12 23:47:25
【问题描述】:

使用form_for时是否支持pattern属性?

<%= form_for order_form do |f| %>
<%= f.label "name" %>
<%= f.text_field :name, required: true %>
<%= f.label "Number" %>
<%= f.telephone_field :phone, pattern: "\\d{10}" %>
<%= f.submit %>

我正在尝试组合一个正则表达式模式以确保电话号码的格式正确。我的问题是模式属性不会只接受正则表达式字符串

<%= f.telephone_field :phone, pattern: /\d{10}/ %> doesnt work

所以当我将正则表达式写成字符串时,它会导致问题,(比如必须转义反斜杠,例如

"\\d{10}" == /\d{10}/

我应该放弃在这个表单上使用 form_for 还是有办法同时使用 form_for 和模式匹配

【问题讨论】:

  • 您可以在前端使用 javascript 对表单进行验证,或者在后端使用 rails 模型验证(然后还有 db 验证)。这些是我所知道的——form_for 或 html5 可能有自己的验证。
  • 为什么pattern: "\\d{10}" 有问题? HTML 中的 pattern attribute 包含被解释为 JavaScript 正则表达式(不是 Ruby 正则表达式)的文本。如果输入\\d 真的很麻烦,那么请改用pattern: '\d{10}'。将一种语言嵌入另一种语言总是有点混乱,当您将一种语言(JavaScript 正则表达式)嵌入另一种语言(HTML)嵌入另一种语言(Ruby)嵌入另一种语言(ERB)时更是如此。
  • 这不是关于转义反斜杠是一个问题或麻烦,我只是想确保我使用最佳实践

标签: ruby-on-rails ruby regex form-for


【解决方案1】:

我尝试了一些类似的方法,但我在 Rails 5.1.4 中工作我的代码是:

<%= form.telephone_field :telefono, id: :person_telefono,
:pattern => '\d{10}', :placeholder => "solo numeros"%>

尝试根据您的程序和 Rails 版本对其进行调整。

问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-23
    • 2021-05-17
    • 2020-10-03
    • 1970-01-01
    • 2015-09-14
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多