我们在Stack Overflow上使用jQuery的优秀验证器插件在输入提交到服务器之前对输入进行客户端验证.
它通常运作良好,然而,这个让我们摸不着头脑.
在用户名字段的提问/答案表单上使用以下验证方法(请注意,您必须注销才能在实际站点上查看此字段;它位于每个/question页面和/ask页面上)
$.validator.addMethod("validUserName",
function(value, element) {
return this.optional(element) ||
/^[\w\-\s\dÀÈÌÒÙàèìòùÁÉÍÓÚÝáéíóúýÂÊÎÔÛâêîôûÃÑÕãñõÄËÏÖÜäëïöüçÇߨøÅ寿ÞþÐð]+$/.test(value); },
"Can only contain A-Z, 0-9, spaces, and hyphens.");
Run Code Online (Sandbox Code Playgroud)
现在这个正则表达式看起来很奇怪,但它非常简单:
是的,我们遇到了国际化正则表达式问题.JavaScript对"单词字符"的定义根本不包括国际字符.
这是一个奇怪的部分:尽管我们已经麻烦地手动将大量有效的国际字符添加到正则表达式,但它不起作用.如果没有获取用户名,则无法在输入框中输入这些国际字符.
只能包含AZ,0-9,空格和连字符
..验证回报!
显然验证的工作正则表达式的其他部分 ..所以..怎么办?
另一个奇怪的部分是,此验证在浏览器的JavaScript控制台中有效,但在作为我们的标准*.js包含的一部分执行时则不行.
/ ^ [\ W- \sÀÈÌÒÙàèìòùÁÉÍÓÚÝáéíóúýÂÊÎÔÛâêîôûÃÑÕãñõÄËÏÖÜäëïöüçÇߨøÅ寿ÞþÐð] + $ /.测试( 'ÓBill日的Hora')===真
我们之前在JavaScript代码中遇到了一些非常奇怪的国际角色问题,导致一些非常非常讨厌的黑客攻击.我们想了解这里发生了什么,为什么.请指教!
我目前有点卡在Perl中的正则表达式(取自我之前的一个问题)来匹配非ASCII语言环境中的单词字符(即德语变音符号).
我已经尝试了各种各样的事情,比如设置正确的语言环境(使用setlocale),将我从MySQL收到的数据转换为UTF8(使用decode_utf8),等等......不幸的是,无济于事.谷歌也没多大帮助.
是否有机会获得以下正则表达式语言环境
$street = "Täststraße"; # I know that this is not orthographically correct
$street =~ s{
\b (\w{0,3}) (\w*) \b
}
{
$1 . ( '*' x length $2 )
}gex;
Run Code Online (Sandbox Code Playgroud)
最终回来$street = "Täs*******"而不是"Tästs***ße"?