Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
The didyoumean npm package is designed to help find the best match for a given string from a list of strings. It's commonly used for suggesting corrections for typos or misspelled words in user input, making it a valuable tool for improving user experience in applications that involve text input.
String Matching
This feature allows you to match a given input string against a list of strings and find the closest match. It's useful for suggesting corrections for misspelled words.
"use strict";
const didYouMean = require('didyoumean');
// List of strings to match against
const list = ['apple', 'banana', 'orange', 'grapes'];
// The string to match
const input = 'aple';
// Find the best match
const match = didYouMean(input, list);
console.log(match); // 'apple'
Case Sensitivity
This feature demonstrates how to toggle case sensitivity. By default, didyoumean is case-sensitive, but you can turn off case sensitivity to broaden the matching criteria.
"use strict";
const didYouMean = require('didyoumean');
didYouMean.caseSensitive = false; // Turn off case sensitivity
// List of strings to match against
const list = ['Apple', 'Banana', 'Orange', 'Grapes'];
// The string to match
const input = 'apple';
// Find the best match
const match = didYouMean(input, list);
console.log(match); // 'Apple'
Threshold for Matches
This feature allows you to set a threshold for how close the match needs to be. The threshold is a number between 0 and 1, where 1 means the match must be exact, and 0 means any match is acceptable.
"use strict";
const didYouMean = require('didyoumean');
// Set the threshold for match quality (0 to 1)
didYouMean.threshold = 0.4;
// List of strings to match against
const list = ['apple', 'banana', 'orange', 'grapes'];
// The string to match
const input = 'aple';
// Find the best match
const match = didYouMean(input, list);
console.log(match); // 'apple'
Fuzzy is a package that provides fuzzy string matching utilities. It can be used to implement autocomplete functionality or to correct user typos. Compared to didyoumean, fuzzy offers more complex algorithms for matching, including substring matching, which might be more suitable for certain applications.
String-similarity compares two strings for similarity. It can find the best match in an array of strings and rate the similarity of two strings. Unlike didyoumean, which focuses on finding the best match, string-similarity provides a similarity rating, offering a more nuanced approach to string comparison.
Levenshtein package calculates the Levenshtein distance between two strings, which is a measure of the difference between two sequences. While didyoumean uses a form of string comparison to suggest the closest match, levenshtein provides the exact number of operations required to transform one string into another, which can be useful for more detailed analysis of string similarity.
A super-simple, highly optimized JS library for matching human-quality input to a list of potential matches. You can use it to suggest a misspelled command-line utility option to a user, or to offer links to nearby valid URLs on your 404 page. (The examples below are taken from a personal project, my HTML5 business card, which uses didYouMean.js to suggest correct URLs from misspelled ones, such as dcporter.aws.af.cm/me/instagarm.) Uses the Levenshtein distance algorithm.
didYouMean.js works in the browser as well as in node.js. To install it for use in node:
npm install didyoumean
Matching against a list of strings:
var input = 'insargrm'
var list = ['facebook', 'twitter', 'instagram', 'linkedin'];
console.log(didYouMean(input, list));
> 'instagram'
// The method matches 'insargrm' to 'instagram'.
input = 'google plus';
console.log(didYouMean(input, list));
> null
// The method was unable to find 'google plus' in the list of options.
Matching against a list of objects:
var input = 'insargrm';
var list = [ { id: 'facebook' }, { id: 'twitter' }, { id: 'instagram' }, { id: 'linkedin' } ];
var key = 'id';
console.log(didYouMean(input, list, key));
> 'instagram'
// The method returns the matching value.
didYouMean.returnWinningObject = true;
console.log(didYouMean(input, list, key));
> { id: 'instagram' }
// The method returns the matching object.
Returns: the closest matching string, or null if no strings exceed the threshold.
Options are set on the didYouMean function object. You may change them at any time.
By default, the method will only return strings whose edit distance is less than 40% (0.4x) of their length. For example, if a ten-letter string is five edits away from its nearest match, the method will return null.
You can control this by setting the "threshold" value on the didYouMean function. For example, to set the edit distance threshold to 50% of the input string's length:
didYouMean.threshold = 0.5;
To return the nearest match no matter the threshold, set this value to null.
This option behaves the same as threshold, but instead takes an integer number of edit steps. For example, if thresholdAbsolute is set to 20 (the default), then the method will only return strings whose edit distance is less than 20. Both options apply.
By default, the method will perform case-insensitive comparisons. If you wish to force case sensitivity, set the "caseSensitive" value to true:
didYouMean.caseSensitive = true;
By default, the method will return null if there is no sufficiently close match. You can change this value here.
By default, the method will return the winning string value (if any). If your list contains objects rather than strings, you may set returnWinningObject to true.
didYouMean.returnWinningObject = true;
This option has no effect on lists of strings.
By default, the method will search all values and return the closest match. If you're simply looking for a "good- enough" match, you can set your thresholds appropriately and set returnFirstMatch to true to substantially speed things up.
didYouMean copyright (c) 2013-2014 Dave Porter.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License here.
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
FAQs
Match human-quality input to potential matches by edit distance.
We found that didyoumean demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.