奇怪的JS正则之 /[A-z]/.test("\\"); // true

本文解析了一个关于JS正则表达式[A-z]的奇怪现象,它竟然匹配了包括转义字符在内的所有字母。通过代码实验,揭示了其在Unicode编码中的工作原理,解释了这种看似不标准的行为背后的原因,并探讨了可能的安全风险。
  /[A-Z]/.test("A"); // true
  /[A-Z]/.test("b"); // false
  /[A-Z]/.test("Z"); // true
  /[A-Z]/.test("z"); // false
  /[a-z]/.test("a"); // true
  /[a-z]/.test("A"); // false
  /[a-z]/.test("z"); // true
  /[a-z]/.test("Z"); // false

The weird thing comes when I do this test:

  /[A-z]/.test("A"); // true
  /[A-z]/.test("a"); // true
  /[A-z]/.test("Z"); // true
  /[A-z]/.test("z"); // true
  /[A-z]/.test("m"); // true
  /[A-z]/.test("D"); // true
  /[A-z]/.test("\\"); // true WTF?

It's supposed to accept only letters from A to Z and a to z. Can someone explain this?

— @byoigres

I had a look into this with the following code:

  var re = /[A-z]/g,s=(function(){
    var f = String.fromCharCode;
    for(var i=0;i<6000;i++) f=f.bind(0, i);
    return f();
  })(),q,z=[];while((q=re.exec(s)) != null) z.push(q[0]);z

It returns

  ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
  "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\", "]", "^",
  "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
  "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]

It is likely, I think that A-z literally means 'any character between 'A' and 'z' in unicode code-point order, or at least charCode order. This allows (I think non-standard) statements like /[ -y]/g:

  var re = /[ -y]/g,s=(function(){
    var f = String.fromCharCode;
    for(var i=0;i<6000;i++) f=f.bind(0, i);
    return f();
  })(),q,z=[];while((q=re.exec(s)) != null) z.push(q[0]);z

Which returns

  [" ", "!", """, "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".",
  "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=",
  ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L",
  "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[",
  "\", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
  "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y"]`

This probably has some potential security implications because if you're using [A-z] to sanitise something, you'll accept []^_`

A very interesting find!

— zemnmez


 

原文完, A-z 我倒是知道是包括 A-Z和a-z 的,因为我记得 ASCII 里面是先 大写字母 再小写字母的,所以 A-z 包括 大写和小写。只是为何 

[A-z]/.test("\\"); 

也是 ture,这个真没有研究过呢,不过看完本文就懂了。因为在 ASCII 表中,Z 到 a 他俩不是接着的,中间还有6个常用字符:

"[", "\", "]", "^", "_", "`",

仔细看的话,还会发现 9 和 A 也不是连着的,所以下面的式子也会成立

[1-z]/.test("\@"); 

反正JS正则的[]中的字符序列是按照ASCII表来连续比对的。看完算是涨姿势了。

 

转载于:https://www.cnblogs.com/muyun/p/5119157.html

test_how_to_buy.py::TestHowToBuyBuilder::test_get_p2p_page FAILED [100%] AssertionError: 响应内容中未找到'P2P'关键字 P2P' in '<!DOCTYPE html><html translate=no lang=en><head><meta charset=UTF-8><script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({\'gtm.start\': new Date().getTime(),event:\'gtm.js\'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!=\'dataLayer\'?\'&l=\'+l:\'\';j.async=true;j.src= \'https://www.googletagmanager.com/gtm.js?id=\'+i+dl;f.parentNode.insertBefore(j,f); })(window,document,\'script\',\'dataLayer\',\'GTM-PM7K2HH2\');</script><script src=https://web.webstatic.cc/sensorsdata.min.js></script><meta name=renderer content=webkit><meta http-equiv=X-UA-Compatible content="IE=edge"><meta content=yes name=apple-mobile-web-app-capable><meta content=yes name=apple-touch-fullscreen><meta content="telephone=no" name=format-detection><meta content=black name=apple-mobile-web-app-status-bar-style><meta name=viewport content="minimal-ui,width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"><title>JuCoin</title><meta name=google-site-verification content=XNK7qkbdXlGZC5qdscfsn3btNpWGvXYxRUOAz4kKmt0><meta name=yandex-verification content=ecd9a602bed59339><link rel=stylesheet type=text/css href=https://at.alicdn.com/t/font_2502537_ytndssfkiy.css><script src=//web-test.jcwork.net/common/libs/vue@2.6.12.vue-router@3.5.1.vuex@3.6.2.min.js></script><link href=//web-test.jcwork.net/web/order/assets/js/app~3d9b8e9e.04f8bd3df0.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/app~e2e93592.a2d6deab71.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~002b9c58.ec13308e9b.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~2a42e354.5037ca7918.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~301ae65c.43bdc9e3e0.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~544a4ec4.7f0a6c7ca6.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~678f84af.179bd77cc9.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~690b702c.b617a7a669.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~6e8b5f81.0d36cfb318.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~7274e1de.f2aa17ba00.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~731d2fff.74d49d5ad6.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~7529033b.3ac50c68e0.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~921ad15b.aad22a0112.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~9c5b28f6.b2931283ae.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~ac50015d.df1b87764e.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~d939e436.d7e11400c0.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~db300d2f.5c0e563e8d.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/runtime.92f87a5477.js rel=modulepreload as=script></head><body><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PM7K2HH2" height=0 width=0 style=display:none;visibility:hidden></iframe></noscript><div id=app></div><script src=/js/iconpark.js></script><script>var isInApp = navigator.userAgent.indexOf(\'ju/\') > -1; if (!isInApp) { var script = document.createElement(\'script\'); script.id = \'ze-snippet\'; script.src = "https://static.zdassets.com/ekr/snippet.js?key=707ff1c5-ee52-41ea-bf75-124f94056064"; document.body.appendChild(script); }</script><script async src="https://www.googletagmanager.com/gtag/js?id=G-ECW5SYQQJF"></script><script>window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag(\'js\', new Date()); gtag(\'config\', \'G-ECW5SYQQJF\');</script><script type=module src=//web-test.jcwork.net/web/order/assets/js/runtime.92f87a5477.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~6e8b5f81.0d36cfb318.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~2a42e354.5037ca7918.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~7529033b.3ac50c68e0.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~ac50015d.df1b87764e.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~921ad15b.aad22a0112.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~731d2fff.74d49d5ad6.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~301ae65c.43bdc9e3e0.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~002b9c58.ec13308e9b.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~544a4ec4.7f0a6c7ca6.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~7274e1de.f2aa17ba00.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~d939e436.d7e11400c0.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~db300d2f.5c0e563e8d.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~690b702c.b617a7a669.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~9c5b28f6.b2931283ae.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~678f84af.179bd77cc9.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/app~e2e93592.a2d6deab71.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/app~3d9b8e9e.04f8bd3df0.js></script><script>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.targe != =t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script src=//web-test.jcwork.net/web/order/assets/js/runtime.ff5150786c.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~6e8b5f81.6b7bef194f.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~2a42e354.5037ca7918.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~7529033b.3ac50c68e0.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~ac50015d.044f32af3e.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~921ad15b.2a7eaabaa0.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~731d2fff.b9fcb6db08.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~301ae65c.43bdc9e3e0.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~002b9c58.ec13308e9b.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~544a4ec4.7f0a6c7ca6.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~7274e1de.38608570f1.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~d939e436.0a4168faf6.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~690b702c.b617a7a669.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~9c5b28f6.5c144a50c2.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~678f84af.179bd77cc9.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/app~e2e93592.a2d6deab71.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/app~3d9b8e9e.e5e0e373f8.js nomodule></script></body></html>' <点击查看差异> test_how_to_buy.py:647: in test_get_p2p_page assert "P2P" in response_text, "响应内容中未找到'P2P'关键字" E AssertionError: 响应内容中未找到'P2P'关键字 E assert 'P2P' in '<!DOCTYPE html><html translate=no lang=en><head><meta charset=UTF-8><script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({\'gtm.start\':\n new Date().getTime(),event:\'gtm.js\'});var f=d.getElementsByTagName(s)[0],\n j=d.createElement(s),dl=l!=\'dataLayer\'?\'&l=\'+l:\'\';j.async=true;j.src=\n \'https://www.googletagmanager.com/gtm.js?id=\'+i+dl;f.parentNode.insertBefore(j,f);\n })(window,document,\'script\',\'dataLayer\',\'GTM-PM7K2HH2\');</script><script src=https://web.webstatic.cc/sensorsdata.min.js></script><meta name=renderer content=webkit><meta http-equiv=X-UA-Compatible content="IE=edge"><meta content=yes name=apple-mobile-web-app-capable><meta content=yes name=apple-touch-fullscreen><meta content="telephone=no" name=format-detection><meta content=black name=apple-mobile-web-app-status-bar-style><meta name=viewport content="minimal-ui,width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"><title>JuCoin</title><meta name=google-site-verification content=XNK7qkbdXlGZC5qdscfsn3btNpWGvXYxRUOAz4kKmt0><meta name=yandex-verification content=ecd9a602bed59339><link rel=stylesheet type=text/css href=https://at.alicdn.com/t/font_2502537_ytndssfkiy.css><script src=//web-test.jcwork.net/common/libs/vue@2.6.12.vue-router@3.5.1.vuex@3.6.2.min.js></script><link href=//web-test.jcwork.net/web/order/assets/js/app~3d9b8e9e.04f8bd3df0.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/app~e2e93592.a2d6deab71.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~002b9c58.ec13308e9b.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~2a42e354.5037ca7918.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~301ae65c.43bdc9e3e0.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~544a4ec4.7f0a6c7ca6.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~678f84af.179bd77cc9.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~690b702c.b617a7a669.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~6e8b5f81.0d36cfb318.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~7274e1de.f2aa17ba00.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~731d2fff.74d49d5ad6.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~7529033b.3ac50c68e0.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~921ad15b.aad22a0112.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~9c5b28f6.b2931283ae.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~ac50015d.df1b87764e.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~d939e436.d7e11400c0.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~db300d2f.5c0e563e8d.js rel=modulepreload as=script><link href=//web-test.jcwork.net/web/order/assets/js/runtime.92f87a5477.js rel=modulepreload as=script></head><body><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PM7K2HH2" height=0 width=0 style=display:none;visibility:hidden></iframe></noscript><div id=app></div><script src=/js/iconpark.js></script><script>var isInApp = navigator.userAgent.indexOf(\'ju/\') > -1;\n if (!isInApp) {\n var script = document.createElement(\'script\');\n script.id = \'ze-snippet\';\n script.src = "https://static.zdassets.com/ekr/snippet.js?key=707ff1c5-ee52-41ea-bf75-124f94056064";\n document.body.appendChild(script);\n }</script><script async src="https://www.googletagmanager.com/gtag/js?id=G-ECW5SYQQJF"></script><script>window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag(\'js\', new Date());\n gtag(\'config\', \'G-ECW5SYQQJF\');</script><script type=module src=//web-test.jcwork.net/web/order/assets/js/runtime.92f87a5477.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~6e8b5f81.0d36cfb318.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~2a42e354.5037ca7918.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~7529033b.3ac50c68e0.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~ac50015d.df1b87764e.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~921ad15b.aad22a0112.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~731d2fff.74d49d5ad6.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~301ae65c.43bdc9e3e0.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~002b9c58.ec13308e9b.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~544a4ec4.7f0a6c7ca6.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~7274e1de.f2aa17ba00.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~d939e436.d7e11400c0.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~db300d2f.5c0e563e8d.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~690b702c.b617a7a669.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~9c5b28f6.b2931283ae.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~678f84af.179bd77cc9.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/app~e2e93592.a2d6deab71.js></script><script type=module src=//web-test.jcwork.net/web/order/assets/js/app~3d9b8e9e.04f8bd3df0.js></script><script>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script src=//web-test.jcwork.net/web/order/assets/js/runtime.ff5150786c.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~6e8b5f81.6b7bef194f.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~2a42e354.5037ca7918.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~7529033b.3ac50c68e0.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~ac50015d.044f32af3e.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~921ad15b.2a7eaabaa0.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~731d2fff.b9fcb6db08.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~301ae65c.43bdc9e3e0.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~002b9c58.ec13308e9b.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~544a4ec4.7f0a6c7ca6.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~7274e1de.38608570f1.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~d939e436.0a4168faf6.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~690b702c.b617a7a669.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~9c5b28f6.5c144a50c2.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/chunk-vendors~678f84af.179bd77cc9.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/app~e2e93592.a2d6deab71.js nomodule></script><script src=//web-test.jcwork.net/web/order/assets/js/app~3d9b8e9e.e5e0e373f8.js nomodule></script></body></html>' 断言失败 断言失败 断言失败 以上是上个问题答案中的P2P接口测试用例脚本跑完后报错的内容,请做对应的修改
07-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值