https://github.com/topener/no-profanity
A JavaScript package to filter and detect profanity
https://github.com/topener/no-profanity
package profanity profanity-filter
Last synced: 9 months ago
JSON representation
A JavaScript package to filter and detect profanity
- Host: GitHub
- URL: https://github.com/topener/no-profanity
- Owner: Topener
- License: mit
- Created: 2023-07-18T21:10:45.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-08-14T13:45:35.000Z (over 2 years ago)
- Last Synced: 2025-04-17T10:58:15.944Z (9 months ago)
- Topics: package, profanity, profanity-filter
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/no-profanity
- Size: 781 KB
- Stars: 5
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# no-profanity
A JavaScript package to detect and filter profanity. Yes this code, contain profanity. But what do you expect from a no-profanity package.
## Installation
```
npm i no-profanity
```
## Credit
Thanks to [bad-words](https://github.com/web-mech/badwords) for the original package. This package is a rewrite of that package, with some extra features and a lot of performance improvements.
Thanks to [google-profanity-words](https://github.com/coffee-and-fun/google-profanity-words) for providing the list of profanities.
## Usage
Using the no-profanity package is very simple. You can use it to detect profanity, or to filter profanity from a string. There are some basic options as well, such as overriding the placeholder character, or adding/removing words from the filterlist.
### Check if a string contains profanity
A basic sample showing a simple checker
```js
import { isProfane } from 'no-profanity';
console.log(isProfane("Don't be an asshole")); // true
console.log(isProfane("This is a nice text")); // false
```
### Replace profanity in a string
A basic sample showing how to replace profanities
```js
import { replaceProfanities } from 'no-profanity';
console.log(replaceProfanities("Don't be an asshole")); // Don't be an *******
console.log(replaceProfanities("This is a nice text")); // This is a nice text
```
### Get profanities from a string
A basic sample returning the profanities
```js
console.log(containsProfanities("what an asshole"));
```
Will return:
```js
[ {
word: 'asshole',
index: 8
} ]
```
### Get all profanities
A basic sample returning all profanities. It will take all options into account, such as excludes and includes. This can be useful in running tests, such as in the file [test/list.test.js](./test/list.test.js).
```js
import { getProfanities } from 'no-profanity';
const options = {}; // add your options here
console.log(getProfanities({options: options}));
```
## Options
There are some overrides possible, but as soon as you want to use an override you will no longer be able pass a string to the functions defined above, but instead, they require an arguments object, like this:
```js
replaceProfanities({
testString: "testable string",
options: {}
});
```
### Override placeholder
The options object should contain a property called `replacement` which should be a string of length 1, unless you want a longer replacement value as the original wordlength. The default value is `*`.
```js
replaceProfanities({
testString: "testable string",
options: {
replacement: '#'
}
});
```
### Remove words from the filterlist
The options object should contain a property called `excludes` which should be an array of strings you don't want to filter on.
```js
replaceProfanities({
testString: "testable string",
options: {
excludes: ['testable']
}
});
```
You can also remove all words from the filter list so you can start your own, using the `emptyList` property.
```js
replaceProfanities({
testString: "testable string",
options: {
emptyList: true
}
});
```
### Add words to the filterlist
The options object should contain a property called `includes` which should be an array of strings you want to filter on.
```js
replaceProfanities({
testString: "testable string",
options: {
includes: ['testable']
}
});
```
### Pre-sanitize the string
The options object has the option to contain a regex pattern to sanitize the string before checking for profanities.
```js
replaceProfanities({
testString: "testable string",
options: {
preSanitize: /[^a-zA-Z0-9]/g
}
});
```
All matches will be replaced with an empty string. If you want to change the replacement for `preSanitize`, you can use the `preSanitizeReplacement` property.
```js
replaceProfanities({
testString: "tabs are the best",
options: {
preSanitizeReplacement: "spaces",
preSanitize: /\btabs\b/,
}
});
```
## bad-words package
This package is the replacement for the `bad-words` package which is outdated and slow. According to a handful of benchmarks, this package is about 150 times as fast.
See also [this](other-packages.md) page for more information and the migration guide.
Most options from the `bad-words` package are usable in the `options` object to be used in this package. However, the `replaceRegex` option is not supported.
## Contributing
Any contributions are highly appreciated. If you want to contribute, please fork the repository and create a pull request. If you have any questions, feel free to create an issue.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. With MIT comes the freedom to use the code for whatever you want, but a credit would be appreciated.