PHP's strncasecmp in TypeScript

✓ Verified: PHP 8.3
Examples tested against actual runtime. CI re-verifies continuously. Only documented examples are tested.

How to use

Install via yarn add locutus and import: import { strncasecmp } from 'locutus/php/strings/strncasecmp'.

Or with CommonJS: const { strncasecmp } = require('locutus/php/strings/strncasecmp')

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
1strncasecmp('Price 12.9', 'Price 12.15', 2)0
2strncasecmp('Price 12.09', 'Price 12.15', 10)-1
3strncasecmp('Price 12.90', 'Price 12.15', 30)8
4strncasecmp('Version 12.9', 'Version 12.15', 20)8
5strncasecmp('Version 12.15', 'Version 12.9', 20)-8

Notes

  • Returns < 0 if str1 is less than str2 ; > 0 if str1 is greater than str2, and 0 if they are equal.

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

export function strncasecmp(argStr1: string, argStr2: string, len: number): number {
// discuss at: https://locutus.io/php/strncasecmp/
// parity verified: PHP 8.3
// original by: Saulo Vallory
// input by: Nate
// bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)
// note 1: Returns < 0 if str1 is less than str2 ; > 0
// note 1: if str1 is greater than str2, and 0 if they are equal.
// example 1: strncasecmp('Price 12.9', 'Price 12.15', 2)
// returns 1: 0
// example 2: strncasecmp('Price 12.09', 'Price 12.15', 10)
// returns 2: -1
// example 3: strncasecmp('Price 12.90', 'Price 12.15', 30)
// returns 3: 8
// example 4: strncasecmp('Version 12.9', 'Version 12.15', 20)
// returns 4: 8
// example 5: strncasecmp('Version 12.15', 'Version 12.9', 20)
// returns 5: -8

let diff
let i = 0
const str1 = (argStr1 + '').toLowerCase().substr(0, len)
const str2 = (argStr2 + '').toLowerCase().substr(0, len)

if (str1.length !== str2.length) {
if (str1.length < str2.length) {
len = str1.length
if (str2.substr(0, str1.length) === str1) {
// return the difference of chars
return str1.length - str2.length
}
} else {
len = str2.length
// str1 is longer than str2
if (str1.substr(0, str2.length) === str2) {
// return the difference of chars
return str1.length - str2.length
}
}
} else {
// Avoids trying to get a char that does not exist
len = str1.length
}

for (diff = 0, i = 0; i < len; i++) {
diff = str1.charCodeAt(i) - str2.charCodeAt(i)
if (diff !== 0) {
return diff
}
}

return 0
}

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 strings functions


Star