PHP's is_unicode in TypeScript

How to use

Install via yarn add locutus and import: import { is_unicode } from 'locutus/php/var/is_unicode'.

Or with CommonJS: const { is_unicode } = require('locutus/php/var/is_unicode')

Use a bundler that supports tree-shaking so you only ship the functions you actually use. Vite, webpack, Rollup, and Parcel all handle this. For server-side use this is less of a concern.

Examples

These examples are extracted from test cases that automatically verify our functions against their native counterparts.

#codeexpected result
1is_unicode('We the peoples of the United Nations...!')true

Notes

  • Almost all strings in JavaScript should be Unicode

Here's what our current TypeScript equivalent to PHP's is_unicode looks like.

import type { PhpRuntimeValue } from '../_helpers/_phpTypes.ts'

type UnicodeValue = PhpRuntimeValue

export function is_unicode(vr: UnicodeValue): vr is string {
// discuss at: https://locutus.io/php/is_unicode/
// original by: Brett Zamir (https://brett-zamir.me)
// note 1: Almost all strings in JavaScript should be Unicode
// example 1: is_unicode('We the peoples of the United Nations...!')
// returns 1: true

if (typeof vr !== 'string') {
return false
}

// If surrogates occur outside of high-low pairs, then this is not Unicode
let arr: RegExpExecArray | null
const highSurrogate = '[\uD800-\uDBFF]'
const lowSurrogate = '[\uDC00-\uDFFF]'
const highSurrogateBeforeAny = new RegExp(highSurrogate + '([\\s\\S])', 'g')
const lowSurrogateAfterAny = new RegExp('([\\s\\S])' + lowSurrogate, 'g')
const singleLowSurrogate = new RegExp('^' + lowSurrogate + '$')
const singleHighSurrogate = new RegExp('^' + highSurrogate + '$')

while ((arr = highSurrogateBeforeAny.exec(vr)) !== null) {
if (!arr[1] || !singleLowSurrogate.test(arr[1])) {
// If high not followed by low surrogate
return false
}
}
while ((arr = lowSurrogateAfterAny.exec(vr)) !== null) {
if (!arr[1] || !singleHighSurrogate.test(arr[1])) {
// If low not preceded by high surrogate
return false
}
}

return true
}

Improve this function

Locutus is a community effort following The McDonald's Theory: we ship first iterations, hoping others will improve them. If you see something that could be better, we'd love your contribution.

View on GitHub · Edit on GitHub · View Raw


« More PHP var functions


Star