相关疑难解决方法(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万
查看次数