A loose spellchecker
JavaScript (ES6), 287 bytes

(a,b)=&gt;[...a].map((l,i)=&gt;{p=k[g="indexOf"](l);q=k[g](o=b[i]);r=r?l==s|o==s?~m[g](l)&amp;&amp;~m[g](o):(x=(p%28/2|0)-(q%28/2|0))&lt;2&amp;x&gt;-2&amp;(y=(p/28|0)-(q/28|0))&lt;2&amp;y&gt;-2:0},r=k=`\`~1!2@3#4$5%6^7&amp;8*9(0)-_=+  \t qQwWeErRtTyYuUiIoOpP[{]}\\|  aAsSdDfFgGhHjJkKlL;:'"
     zZ${m="xXcCvVbBnNmM,&lt;"}.&gt;/?`,m+=s=" ")|r


Explanation

Returns 1 for true and 0 for false.

Note that the \t should be a literal tab character.

(a,b)=&gt;
  [...a].map((l,i)=&gt;{               // for each character l at index i in word A
      p=k[g="indexOf"](l);          // p = index of l in k
      q=k[g](o=b[i]);               // o = letter in word B, q = index of o in k
      r=r?                          // if r
        l==s|o==s?                  // if l or o is a space
          ~m[g](l)&amp;&amp;~m[g](o)        // check the space-matching characters for l and o
        :
          (x=(p%28/2|0)-(q%28/2|0)) // X distance between letters A and B
            &lt;2&amp;x&gt;-2&amp;                // if distance is 2 or greater, r = 0
          (y=(p/28|0)-(q/28|0))     // Y distance between letters A and B
            &lt;2&amp;y&gt;-2                 // if distance is 2 or greater, r = 0
      :0                            // do nothing if r == 0
    },
    r=                              // r = result

    // Keyboard string, each row is 28 characters long, using spaces as padding
    k=`\`~1!2@3#4$5%6^7&amp;8*9(0)-_=+  \t qQwWeErRtTyYuUiIoOpP[{]}\\|  aAsSdDfFgGhHjJkKlL;:'"
     zZ${m="xXcCvVbBnNmM,&lt;"}.&gt;/?`,

    m+=                             // m = list of characters that are adjacent to space
    s=" "                           // add space to the list, s = space character
  )
  |r                                // return r


Test



var solution = (a,b)=&gt;[...a].map((l,i)=&gt;{p=k[g="indexOf"](l);q=k[g](o=b[i]);r=r?l==s|o==s?~m[g](l)&amp;&amp;~m[g](o):(x=(p%28/2|0)-(q%28/2|0))&lt;2&amp;x&gt;-2&amp;(y=(p/28|0)-(q/28|0))&lt;2&amp;y&gt;-2:0},r=k=`\`~1!2@3#4$5%6^7&amp;8*9(0)-_=+  \t qQwWeErRtTyYuUiIoOpP[{]}\\|  aAsSdDfFgGhHjJkKlL;:'"
     zZ${m="xXcCvVbBnNmM,&lt;"}.&gt;/?`,m+=s=" ")|r
A = &lt;input type="text" id="A" value="John Doe" /&gt;&lt;br /&gt;
B = &lt;input type="text" id="B" value="Jonh Deo" /&gt;&lt;br /&gt;
&lt;button onclick="result.textContent=solution(A.value,B.value)"&gt;Go&lt;/button&gt;
&lt;pre id="result"&gt;&lt;/pre&gt;