code: function nfcQuickCheck(s) {
  		// check for only ascii characters first to avoid unnecessary processing
  		if (!/^[\u0001-\u00ff]*$/.test(s)) {
  			var lastCanonicalClass = 0;
  			for (var i = 0; i < s.length; ++i) {
  				var cp = s.charCodeAt(i);
  				// check for supplementary characters, complex, as charCodeAt returns only charcodes smaller than 0xFFFF,
  				// which is the Basic Multilingual Plane (BMP), but for normalizations also characters of the Supplementary
  				// Multilingual Plane (SMP) have to be considered
  				if (isHighSurrogate(cp)) {
  					// check the next character
  					var ncp = s.charCodeAt(i + 1);
  					if (isLowSurrogate(ncp)) {
  						// calculate the according char code in SMP and skip further tests for the next character (ncp)
  						cp = (cp - 0xD800) * 0x400 + (ncp - 0xDC00) + 0x10000;
  						++i;
  					}
  				}
  				var canonicalClass = getCanonicalClass(cp);
  				// check canonical class or reference list
  				if (lastCanonicalClass > canonicalClass && canonicalClass !== 0 || isNotAllowed(cp)) {
  					return false;
  				}
  				lastCanonicalClass = canonicalClass;
  			}
  		}
  		// nothing has been found
  		return true;
  	}
docs: quickcheck implementations