UNPKG

locutus

Version:

Locutus other languages' standard libraries to JavaScript for fun and educational purposes

41 lines (40 loc) 1.53 kB
import { getPhpLocaleGroup } from "../_helpers/_phpRuntimeState.js"; import { setlocale } from "../strings/setlocale.js"; const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value); const defaultUpper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; const defaultLower = 'abcdefghijklmnopqrstuvwxyz'; export 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 = ''; setlocale('LC_ALL', 0); const lcCtypeValue = 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; }