Changing case changes string length

Some JavaScript engines change the length of the string when changing it to lower or uppercase. This script tries to test every Unicode character and output those which change their length.

by hippietrail

HTML

<script src="http://xregexp.com/xregexp-all.js"></script>

JavaScript

'use strict';


/*!
 * From: (c) 2012 Steven Levithan <http://slevithan.com/>
 * MIT License
 */
if (!String.fromCodePoint) {
    /*!
     * ES6 Unicode Shims 0.1
     * (c) 2012 Steven Levithan <http://slevithan.com/>
     * MIT License
     */
    String.fromCodePoint = function fromCodePoint() {
        var chars = [],
            point, offset, units, i;
        for (i = 0; i < arguments.length; ++i) {
            point = arguments[i];
            offset = point - 0x10000;
            units = point > 0xFFFF ? [0xD800 + (offset >> 10), 0xDC00 + (offset & 0x3FF)] : [point];
            chars.push(String.fromCharCode.apply(null, units));
        }
        return chars.join("");
    }
}

//var reLetter = XRegExp('^\\p{L}$', 'A');    // A flag is for Unicode Astral plane support
var reLetter = XRegExp('^\\p{L}$');

var i;
var l;
var lc, uc;

for (i = 0x000000; i < 0x10ffff; ++i) {
    l = String.fromCodePoint(i);

    if (reLetter.test(l)) {
        lc = l.toLowerCase();
        uc = l.toUpperCase();
        if (l.length !== lc.length) {
            console.log(i, '>', l, lc);
        }
        if (l.length !== uc.length) {
            console.log(i, '<', l, uc);
        }
    }
}