@2toad/profanity
Version:
A multi-language profanity filter with full TypeScript support
171 lines (125 loc) • 4.8 kB
Markdown
# Profanity 🧼

[](https://www.npmjs.com/package/@2toad/profanity)
[](https://github.com/2Toad/Profanity/actions/workflows/nodejs.yml)
A multi-language profanity filter with full TypeScript support
## Getting Started
Install the package
```Shell
npm i @2toad/profanity
```
>If you're using Node 11.x or older, you'll need to install [Profanity 1.x](https://github.com/2Toad/Profanity/releases)
## Usage
```JavaScript
import { profanity, CensorType } from '@2toad/profanity';
// or
const { profanity, CensorType } = require('@2toad/profanity');
```
```JavaScript
profanity.exists('I like big butts and I cannot lie');
// true
profanity.exists('I like big glutes and I cannot lie');
// false
profanity.censor('I like big butts (aka arses) and I cannot lie');
// I like big @#$%&! (aka @#$%&!) and I cannot lie
profanity.censor('I like big butts (aka arses) and I cannot lie', CensorType.FirstChar);
// I like big *utts (aka *rses) and I cannot lie
```
## Options
Create an instance of the Profanity class to change the default options:
```JavaScript
import { Profanity } from '@2toad/profanity';
const profanity = new Profanity({
languages: ['de'],
wholeWord: false,
grawlix: '*****',
grawlixChar: '$',
});
```
### languages
By default, this is set to `['en']` (English). You can change the default to any [supported language](./supported-languages.md), including multiple languages:
```JavaScript
const profanity = new Profanity({
languages: ['en', 'de'],
});
```
You can override this option by specifying the languages in `exists` or `censor`:
```JavaScript
profanity.exists('Je suis un connard', ['fr']);
// true
profanity.censor('I like big butts and je suis un connard', CensorType.Word, ['en', 'de', 'fr']);
// I like big @#$%&! and je suis un @#$%&!
```
If no languages are specified in the method call, it will use the languages specified in the options.
### wholeWord
By default, this is set to `true` so profanity only matches on whole words:
```JavaScript
profanity.exists('Arsenic is poisonous but not profane');
// false
```
Setting this to `false`, results in partial word matches:
```JavaScript
profanity.exists('Arsenic is poisonous but not profane');
// true (matched on arse)
```
#### Compound Words
Profanity detection works on parts of compound words, rather than treating hyphenated or underscore-separated words as indivisible.
When `wholeWord` is `true`, each portion of a compound word is analyzed for a match:
```JavaScript
profanity.exists("Don't be an arsenic-monster");
// false
profanity.exists("Don't be an arse-monster");
// true (matched on arse)
```
Setting `wholeWord` to `false`, results in partial word matches on each portion of a compound word:
```JavaScript
profanity.exists("Don't be an arsenic-monster");
// true (matched on arse)
```
### grawlix
By default this is set to `@#$%&!`:
```JavaScript
profanity.censor('I like big butts and I cannot lie');
// I like big @#$%&! and I cannot lie
```
Setting this to `****`, results in:
```JavaScript
profanity.censor('I like big butts and I cannot lie');
// I like big **** and I cannot lie
```
### grawlixChar
When specifying a `CensorType` other than `CensorType.Word`, this is the character used by the `censor` function.
By default this is set to `*`:
```JavaScript
profanity.censor('I like big butts and I cannot lie', CensorType.AllVowels);
// I like big b*tts and I cannot lie
```
Setting this to `$`, results in:
```JavaScript
profanity.censor('I like big butts and I cannot lie', CensorType.AllVowels);
// I like big b$tts and I cannot lie
```
## Customize the word list
Add words:
```JavaScript
profanity.addWords(['aardvark', 'zebra']);
```
Remove words:
```JavaScript
profanity.removeWords(['butt', 'arse']);
```
## Whitelist
The whitelist allows you to specify words that are always ignored by the profanity filter.
>This can be useful if you want to enable partial word matching (`wholeWord = false`), so combined words are caught (e.g., arselicker), while specific words you add to the whitelist are ignored (e.g., arsenic).
Add words to the whitelist:
```JavaScript
profanity.whitelist.addWords(['arsenic', 'buttress']);
```
Remove words from the whitelist:
```JavaScript
profanity.whitelist.removeWords(['arsenic', 'buttress']);
```
## Benchmarking ⏱️
To see how Profanity performs, check out our [benchmark results](./src/tools/benchmark/results.md).
## Contributing 🤝
So you want to contribute to the Profanity project? Fantastic! Please read the [Contribute](./contribute.md) doc to get started.