相关疑难解决方法(0)

国际字符的JavaScript验证问题

我们在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)

现在这个正则表达式看起来很奇怪,但它非常简单:

  • 匹配字符串的开头(^)
  • 匹配任何这些..
    • 字符(\ w)
    • 破折号( - )
    • 空间(\ s)
    • 数字(\ d)
    • 疯狂的月亮语言字符(àèìòù等)
  • 现在匹配字符串的结尾($)

是的,我们遇到了国际化正则表达式问题.JavaScript对"单词字符"的定义根本不包括国际字符.

这是一个奇怪的部分:尽管我们已经麻烦地手动将大量有效的国际字符添加到正则表达式,但它不起作用.如果没有获取用户名,则无法在输入框中输入这些国际字符.

只能包含AZ,0-9,空格和连字符

..验证回报!

显然验证工作正则表达式的其他部分 ..所以..怎么办?

另一个奇怪的部分是,此验证在浏览器的JavaScript控制台中有效,但在作为我们的标准*.js包含的一部分执行时则不行.

/ ^ [\ W- \sÀÈÌÒÙàèìòùÁÉÍÓÚÝáéíóúýÂÊÎÔÛâêîôûÃÑÕãñõÄËÏÖÜäëïöüçÇߨøÅ寿ÞþÐð] + $ /.测试( 'ÓBill日的Hora')===真

我们之前在JavaScript代码中遇到了一些非常奇怪的国际角色问题,导致一些非常非常讨厌的黑客攻击.我们想了解这里发生了什么,为什么.请指教!

javascript validation jquery internationalization

22
推荐指数
2
解决办法
1万
查看次数

区域设置感知Perl正则表达式(匹配字边界)

我目前有点卡在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"

regex perl locale internationalization

4
推荐指数
1
解决办法
1268
查看次数