ruby-on-rails - Ruby on Rails 中客户端服务器的正则表达式
问题描述
我正在对我的 rails 应用程序中的名称进行服务器端和客户端验证。目前,我必须复制正则表达式,因为在服务器上工作的常量会引发错误。我怎样才能修改代码,所以我没有这个重复?
应用程序/模型/resident.rb
NAME_FORMAT = /^(?!.*\.\S)[a-zA-Z àâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞąćęłńóśźżĄĆĘŁŃÓŚŹŻìíòúÌÍÒÚáñÁÑ \',.-]+$/
validate :name_is_acceptable, if: -> { (last_name_changed? || first_name_changed?) && (persisted? || !imported?) }
def name_is_acceptable
[:first_name, :last_name].each do |attr|
value = self.send(attr)
next if value.blank? || value =~ NAME_FORMAT
errors.add attr, I18n.t(:resident_name_invalid, scope: 'errors.messages')
end
end
app/view/resident/_update.html.erb
<%= text_field_tag 'resident[last_name]', nil, class: 'form-control', placeholder: 'Last Name', required: true, maxlength: 50, pattern: '^(?!.*\.\S)[a-zA-Z àâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞąćęłńóśźżĄĆĘŁŃÓŚŹŻìíòúÌÍÒÚáñÁÑ \',.-]+$', oninvalid: "setCustomValidity('Contains unsupported characters.')", oninput: "setCustomValidity('')" %>
客户端错误
Pattern attribute value (?-mix:^(?!.*\.\S)[a-zA-Z àâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞąćęłńóśźżĄĆĘŁŃÓŚŹŻìíòúÌÍÒÚáñÁÑ \',.-]+$) is not a valid regular expression: Uncaught SyntaxError: Invalid regular expression: /(?-mix:^(?!.*\.\S)[a-zA-Z àâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞąćęłńóśźżĄĆĘŁŃÓŚŹŻìíòúÌÍÒÚáñÁÑ \',.-]+$)/: Invalid group
解决方案
我不太确定你的代码。它可能缺少标志。你的表达似乎工作正常:
/^(?!.*\.\S)[a-zA-Z àâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞąćęłńóśźżĄĆĘŁŃÓŚŹŻìíòúÌÍÒÚáñÁÑ \',.-]+$/m
红宝石测试
re = /^(?!.*\.\S)[a-zA-Z àâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞąćęłńóśźżĄĆĘŁŃÓŚŹŻìíòúÌÍÒÚáñÁÑ \',.-]+$/m
str = 'abcàâä'
# Print the match result
str.scan(re) do |match|
puts match.to_s
end
正则表达式
您可以在regex101.com中修改/更改您的表达式。
正则表达式电路
您还可以在jex.im中可视化您的表达式:
JavaScript 演示
const regex = /^(?!.*\.\S)[a-zA-Z àâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞąćęłńóśźżĄĆĘŁŃÓŚŹŻìíòúÌÍÒÚáñÁÑ \',.-]+$/gm;
const str = `abcàâä`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
推荐阅读
- python - 满足第一级条件时更改第二级多索引标签
- php - ini_get_all('Zend OPcache') 回显无法找到扩展的警告
- flutter - 配置项目“:pdf_render”时出现问题
- c - C 编程语言中“%*d”的未定义行为
- r - 标记包含列表中字符串的变量
- javascript - 我如何将我的“输出”放入一种类型的表中,例如我所包含的表?
- ca - MKcert - 错误:添加证书:添加证书失败:访问被拒绝
- java - 在 Spring Batch 中使用 StaxEventItemWriter 时,ZipFileInputStream 读取方法正在延迟编组过程
- node.js - 如何将行索引作为值 Exceljs
- python - Folium 的 TimesliderChoropleth 上没有颜色