Ruby on rails rubyonrails中客户端服务器的RegEx

Ruby on rails rubyonrails中客户端服务器的RegEx,ruby-on-rails,regex,ruby,regex-group,client-side-validation,Ruby On Rails,Regex,Ruby,Regex Group,Client Side Validation,我正在对rails应用程序中的名称进行服务器端和客户端验证。目前,我必须复制正则表达式,因为在服务器上工作的常量抛出了一个错误。如何修改代码以避免重复 app/models/resident.rb app/view/resident/_update.html.erb 我不太确定你的密码。可能是缺少标志。你的表情似乎很好: /^(?!.*\.\S)[a-zA-Z àâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞąćęłńóśźżĄĆĘŁŃÓŚŹŻìíòúÌÍÒÚáñÁÑ

我正在对rails应用程序中的名称进行服务器端和客户端验证。目前,我必须复制正则表达式,因为在服务器上工作的常量抛出了一个错误。如何修改代码以避免重复

app/models/resident.rb app/view/resident/_update.html.erb
我不太确定你的密码。可能是缺少标志。你的表情似乎很好:

/^(?!.*\.\S)[a-zA-Z àâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞąćęłńóśźżĄĆĘŁŃÓŚŹŻìíòúÌÍÒÚáñÁÑ \',.-]+$/m
红宝石测试 正则表达式 您可以在中修改/更改表达式

正则表达式电路 您还可以在以下位置可视化您的表达式:

JavaScript演示
const regex=/^(?)ẞਹਹਹਹ昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈;
const str=`abcá–ä`;
让m;
while((m=regex.exec(str))!==null){
//这是避免具有零宽度匹配的无限循环所必需的
if(m.index==regex.lastIndex){
regex.lastIndex++;
}
//可以通过'm`-变量访问结果。
m、 forEach((匹配,组索引)=>{
log(`Found match,group${groupIndex}:${match}`);
});

}
我不太确定你的代码。可能是缺少标志。你的表情似乎很好:

/^(?!.*\.\S)[a-zA-Z àâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞąćęłńóśźżĄĆĘŁŃÓŚŹŻìíòúÌÍÒÚáñÁÑ \',.-]+$/m
红宝石测试 正则表达式 您可以在中修改/更改表达式

正则表达式电路 您还可以在以下位置可视化您的表达式:

JavaScript演示
const regex=/^(?)ẞਹਹਹਹ昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈昈;
const str=`abcá–ä`;
让m;
while((m=regex.exec(str))!==null){
//这是避免具有零宽度匹配的无限循环所必需的
if(m.index==regex.lastIndex){
regex.lastIndex++;
}
//可以通过'm`-变量访问结果。
m、 forEach((匹配,组索引)=>{
log(`Found match,group${groupIndex}:${match}`);
});

}
我决定用一个新常数修改常驻模型,并从那里开始工作

resident.rb _update.html.erb


这样做,我仍然只在一个点上定义express,这是我的主要目标。

我决定用一个新常量修改常驻模型,并从那里开始工作

resident.rb _update.html.erb


这样做,我仍然只在一个点上定义express,这是我的主要目标。

这是一个雄心勃勃的正则表达式,但不要忘记Ragnheiður和Altuğ这样的名字。这是一组不完整的带有重音的拉丁字母,可能会给用户带来令人沮丧的障碍。这是一个雄心勃勃的正则表达式,但不要忘记Ragnheiður和Altuğ等名字。这是一组不完整的带有重音的拉丁字母,可能会成为用户的一个令人沮丧的障碍。您最好不要使用重音字符的显式列表。或者干脆放弃限制,因为任何限制都会以某种方式被打破。而且此外,您几乎总是希望Ruby中的
\A
\z
而不是
^
$
。当然,让一个非平凡的正则表达式在正则表达式引擎中工作不会有多大进展。@muistooshort那么这就是新的模式了
\A(?。*.\S)[\p{L}',.-]+\z
如果是这样,我会得到这个错误
无效的正则表达式:/\A(?。.*.\S)[\p{L}',.-]+\z/:浏览器中的无效转义
\p{L}看起来是个好的开始,可能需要包括
\p{p}
,而不仅仅是这四个标点(有些名字像
D'arcy
,他们可能不想拼写它
D'arcy
l).JavaScript希望您使用
u
修饰符,因此您可以说
/…/u
。然后,我们陷入了一场特殊情况和挫折的噩梦。如果这不是一项严格的外部要求,那么用户名可能应该是任意字符串(当然,使用某种Unicode标准化)。这是一个令人惊讶的难题。此外,我认为JavaScript不理解
\a
\z
。您最好使用重音字符列表,而不是显式的重音字符列表。或者干脆取消限制,因为任何限制都会以某种方式被打破。此外,您几乎总是想要
\a
\z
而不是Ruby中的
^
$
。当然,让一个非平凡的正则表达式在正则表达式引擎中工作不会太远。@muistooshort所以这将是新模式?
\A(?。*.\S)[\p{L}',.-]+\z
\p{L}
看起来是一个好的开始,可能需要包括
\p{p}
而不仅仅是这四个标点符号(有像
D'arcy
这样的名称,他们可能不想拼写它
D'arcy
L).JavaScript希望您使用
u
修饰符,因此您可以说
/…/u
。然后,我们陷入了一场特殊情况和挫折的噩梦。如果这不是一项严格的外部要求,那么用户名可能应该是任意字符串(当然,使用某种Unicode标准化)。这是一个令人惊讶的难题。此外,我认为JavaScript不理解
\a
\z
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
JS_NAME_FORMAT = '^(?!.*\.\S)[a-zA-Z àâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞąćęłńóśźżĄĆĘŁŃÓŚŹŻìíòúÌÍÒÚáñÁÑ \',.-]+$'
NAME_FORMAT = /#{JS_NAME_FORMAT}/
<%= text_field_tag 'resident[last_name]', nil, class: 'form-control', placeholder: 'Last Name', required: true, maxlength: 50, pattern: Resident::JS_NAME_FORMAT, oninvalid: "setCustomValidity('Contains unsupported characters.')", oninput: "setCustomValidity('')" %>