locutus
Version:
Locutus other languages' standard libraries to JavaScript for fun and educational purposes
44 lines (43 loc) • 1.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sql_regcase = sql_regcase;
const _phpRuntimeState_ts_1 = require("../_helpers/_phpRuntimeState.js");
const setlocale_ts_1 = require("../strings/setlocale.js");
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
const defaultUpper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
const defaultLower = 'abcdefghijklmnopqrstuvwxyz';
function sql_regcase(str) {
// discuss at: https://locutus.io/php/sql_regcase/
// original by: Brett Zamir (https://brett-zamir.me)
// example 1: sql_regcase('Foo - bar.')
// returns 1: '[Ff][Oo][Oo] - [Bb][Aa][Rr].'
let upper = '';
let lower = '';
let pos = -1;
let retStr = '';
(0, setlocale_ts_1.setlocale)('LC_ALL', 0);
const lcCtypeValue = (0, _phpRuntimeState_ts_1.getPhpLocaleGroup)('LC_CTYPE', 'LC_CTYPE');
if (lcCtypeValue && isRecord(lcCtypeValue)) {
const upperValue = lcCtypeValue.upper;
const lowerValue = lcCtypeValue.lower;
upper = typeof upperValue === 'string' ? upperValue : defaultUpper;
lower = typeof lowerValue === 'string' ? lowerValue : defaultLower;
}
else {
upper = defaultUpper;
lower = defaultLower;
}
if (!upper || !lower) {
return str;
}
// @todo: Make this more readable
for (let i = 0; i < str.length; i++) {
if ((pos = upper.indexOf(str.charAt(i))) !== -1 || (pos = lower.indexOf(str.charAt(i))) !== -1) {
retStr += '[' + upper.charAt(pos) + lower.charAt(pos) + ']';
}
else {
retStr += str.charAt(i);
}
}
return retStr;
}