Skip to content

Helpers

Module with various helper methods providing basic (seed-dependent) operations useful for implementing faker methods.

Overview

A particularly helpful method is arrayElement() which returns a random element from an array. This is useful when adding custom data that Faker doesn't contain.

There are alternatives of this method for objects (objectKey() and objectValue()) and enums (enumValue()). You can also return multiple elements (arrayElements()) or elements according to a weighting (weightedArrayElement()).

A number of methods can generate strings according to various patterns: replaceSymbols() and fromRegExp().

arrayElement

Returns random element from the given array.

Available since v6.3.0

Parameters

NameTypeDefaultDescription
<T>any

The type of the elements to pick from.

arrayT[]

The array to pick the value from.

Returns: T

Throws: If the given array is empty.

ts
function arrayElement<const T>(array: ReadonlyArray<T>): T;

Examples

ts
faker.helpers.arrayElement(['cat', 'dog', 'mouse']) // 'dog'

arrayElements

Returns a subset with random elements of the given array in random order.

Available since v6.3.0

Parameters

NameTypeDefaultDescription
<T>any

The type of the elements to pick from.

arrayT[]

Array to pick the value from.

count?number | { ... }

Number or range of elements to pick. When not provided, random number of elements will be picked. When value exceeds array boundaries, it will be limited to stay inside.

count.maxnumber

The maximum number of elements to pick.

count.minnumber

The minimum number of elements to pick.

Returns: T[]

ts
function arrayElements<const T>(
  array: ReadonlyArray<T>,
  count?:
    | number
    | {
        min: number;
        max: number;
      }
): T[];

Examples

ts
faker.helpers.arrayElements(['cat', 'dog', 'mouse']) // ['mouse', 'cat']
faker.helpers.arrayElements([1, 2, 3, 4, 5], 2) // [4, 2]
faker.helpers.arrayElements([1, 2, 3, 4, 5], { min: 2, max: 4 }) // [3, 5, 1]

enumValue

Returns a random value from an Enum object.

This does the same as objectValue except that it ignores (the values assigned to) the numeric keys added for TypeScript enums.

Available since v8.0.0

Parameters

NameTypeDefaultDescription
<T>Record<string | number, string | number>

Type of generic enums, automatically inferred by TypeScript.

enumObjectT

Enum to pick the value from.

Returns: T[keyof T]

ts
function enumValue<T extends Record<string | number, string | number>>(
  enumObject: T
): T[keyof T];

Examples

ts
enum Color { Red, Green, Blue }
faker.helpers.enumValue(Color) // 1 (Green)

enum Direction { North = 'North', South = 'South'}
faker.helpers.enumValue(Direction) // 'South'

enum HttpStatus { Ok = 200, Created = 201, BadRequest = 400, Unauthorized = 401 }
faker.helpers.enumValue(HttpStatus) // 200 (Ok)

fake

Generator for combining faker methods based on a static string input or an array of static string inputs.

Note: We recommend using string template literals instead of fake(), which are faster and strongly typed (if you are using TypeScript), e.g. const address = `${faker.location.zipCode()} ${faker.location.city()}`;

This method is useful if you have to build a random string from a static, non-executable source (e.g. string coming from a user, stored in a database or a file).

It checks the given string for placeholders and replaces them by calling faker methods:

js
const hello = faker.helpers.fake('Hi, my name is {{person.firstName}} {{person.lastName}}!');

This would use the faker.person.firstName() and faker.person.lastName() method to resolve the placeholders respectively.

It is also possible to provide parameters. At first, they will be parsed as json, and if that isn't possible, it will fall back to string:

js
const message = faker.helpers.fake('You can call me at {{phone.number(+!# !## #### #####!)}}.');

It is also possible to use multiple parameters (comma separated).

js
const message = faker.helpers.fake('Your pin is {{string.numeric(4, {"allowLeadingZeros": true})}}.');

It is also NOT possible to use any non-faker methods or plain javascript in such patterns.

Available since v7.4.0

Parameters

NameTypeDefaultDescription
patternstring | string[]

The pattern string that will get interpolated. If an array is passed, a random element will be picked and interpolated.

Returns: string

ts
function fake(pattern: string | ReadonlyArray<string>): string;

Examples

ts
faker.helpers.fake('{{person.lastName}}') // 'Barrows'
faker.helpers.fake('{{person.lastName}}, {{person.firstName}} {{person.suffix}}') // 'Durgan, Noe MD'
faker.helpers.fake('This is static test.') // 'This is static test.'
faker.helpers.fake('Good Morning {{person.firstName}}!') // 'Good Morning Estelle!'
faker.helpers.fake('You can visit me at {{location.streetAddress(true)}}.') // 'You can visit me at 3393 Ronny Way Apt. 742.'
faker.helpers.fake('I flipped the coin and got: {{helpers.arrayElement(["heads", "tails"])}}') // 'I flipped the coin and got: tails'
faker.helpers.fake(['A: {{person.firstName}}', 'B: {{person.lastName}}']) // 'A: Barry'

fromRegExp

Generates a string matching the given regex like expressions.

This function doesn't provide full support of actual RegExp. Features such as grouping, anchors and character classes are not supported. If you are looking for a library that randomly generates strings based on RegExps, see randexp.js

Supported patterns:

  • x{times} => Repeat the x exactly times times.
  • x{min,max} => Repeat the x min to max times.
  • [x-y] => Randomly get a character between x and y (inclusive).
  • [x-y]{times} => Randomly get a character between x and y (inclusive) and repeat it times times.
  • [x-y]{min,max} => Randomly get a character between x and y (inclusive) and repeat it min to max times.
  • [^...] => Randomly get an ASCII number or letter character that is not in the given range. (e.g. [^0-9] will get a random non-numeric character).
  • [-...] => Include dashes in the range. Must be placed after the negate character ^ and before any character sets if used (e.g. [^-0-9] will not get any numeric characters or dashes).
  • /[x-y]/i => Randomly gets an uppercase or lowercase character between x and y (inclusive).
  • x? => Randomly decide to include or not include x.
  • [x-y]? => Randomly decide to include or not include characters between x and y (inclusive).
  • x* => Repeat x 0 or more times.
  • [x-y]* => Repeat characters between x and y (inclusive) 0 or more times.
  • x+ => Repeat x 1 or more times.
  • [x-y]+ => Repeat characters between x and y (inclusive) 1 or more times.
  • . => returns a wildcard ASCII character that can be any number, character or symbol. Can be combined with quantifiers as well.

Available since v8.0.0

Parameters

NameTypeDefaultDescription
patternstring | RegExp

The template string/RegExp to generate a matching string for.

Returns: string

Throws: If min value is more than max value in quantifier, e.g. #{10,5}. If an invalid quantifier symbol is passed in.

ts
function fromRegExp(pattern: string | RegExp): string;

Examples

ts
faker.helpers.fromRegExp('#{5}') // '#####'
faker.helpers.fromRegExp('#{2,9}') // '#######'
faker.helpers.fromRegExp('[1-7]') // '5'
faker.helpers.fromRegExp('#{3}test[1-5]') // '###test3'
faker.helpers.fromRegExp('[0-9a-dmno]') // '5'
faker.helpers.fromRegExp('[^a-zA-Z0-8]') // '9'
faker.helpers.fromRegExp('[a-d0-6]{2,8}') // 'a0dc45b0'
faker.helpers.fromRegExp('[-a-z]{5}') // 'a-zab'
faker.helpers.fromRegExp(/[A-Z0-9]{4}-[A-Z0-9]{4}/) // 'BS4G-485H'
faker.helpers.fromRegExp(/[A-Z]{5}/i) // 'pDKfh'
faker.helpers.fromRegExp(/.{5}/) // '14(#B'
faker.helpers.fromRegExp(/Joh?n/) // 'Jon'
faker.helpers.fromRegExp(/ABC*DE/) // 'ABDE'
faker.helpers.fromRegExp(/bee+p/) // 'beeeeeeeep'

maybe

Returns the result of the callback if the probability check was successful, otherwise undefined.

Available since v6.3.0

Parameters

NameTypeDefaultDescription
<TResult>any

The type of result of the given callback.

callback() => TResult

The callback to that will be invoked if the probability check was successful.

options{ ... }{}

The options to use.

options.probability?number0.5

The probability ([0.00, 1.00]) of the callback being invoked.

Returns: undefined | TResult

ts
function maybe<const TResult>(
  callback: () => TResult,
  options: {
    probability?: number;
  } = {}
): TResult | undefined;

Examples

ts
faker.helpers.maybe(() => 'Hello World!') // 'Hello World!'
faker.helpers.maybe(() => 'Hello World!', { probability: 0.1 }) // undefined
faker.helpers.maybe(() => 'Hello World!', { probability: 0.9 }) // 'Hello World!'

multiple

Generates an array containing values returned by the given method.

Available since v8.0.0

Parameters

NameTypeDefaultDescription
<TResult>any

The type of elements.

method(v: unknown, index: number) => TResult

The method used to generate the values. The method will be called with (_, index), to allow using the index in the generated value e.g. as id.

options{ ... }{}

The optional options object.

options.count?number | { min: number; max: number; }3

The number or range of elements to generate.

Returns: TResult[]

ts
function multiple<const TResult>(
  method: (v: unknown, index: number) => TResult,
  options: {
    count?:
      | number
      | {
          min: number;
          max: number;
        };
  } = {}
): TResult[];

Examples

ts
faker.helpers.multiple(() => faker.person.firstName()) // [ 'Aniya', 'Norval', 'Dallin' ]
faker.helpers.multiple(() => faker.person.firstName(), { count: 3 }) // [ 'Santos', 'Lavinia', 'Lavinia' ]
faker.helpers.multiple((_, i) => `${faker.color.human()}-${i + 1}`) // [ 'orange-1', 'orchid-2', 'sky blue-3' ]

mustache

Replaces the {{placeholder}} patterns in the given string mustache style.

Available since v2.0.1

Parameters

NameTypeDefaultDescription
str?string

The template string to parse.

dataRecord<string, string | ((substring: string, ...args: any[]) => string)>

The data used to populate the placeholders. This is a record where the key is the template placeholder, whereas the value is either a string or a function suitable for String.replace().

Returns: string

ts
function mustache(
  str: string | undefined,
  data: Record<string, string | Parameters<string['replace']>[1]>
): string;

Examples

ts
faker.helpers.mustache('I found {{count}} instances of "{{word}}".', {
  count: () => `${faker.number.int()}`,
  word: "this word",
}) // 'I found 57591 instances of "this word".'

objectEntry

Returns a random [key, value] pair from the given object.

Available since v8.0.0

Parameters

NameTypeDefaultDescription
<T>Record<string, unknown>

The type of the object to select from.

objectT

The object to be used.

Returns: [keyof T, T[keyof T]]

Throws: If the given object is empty.

ts
function objectEntry<const T extends Record<string, unknown>>(
  object: T
): [keyof T, T[keyof T]];

Examples

ts
faker.helpers.objectEntry({ prop1: 'value1', prop2: 'value2' }) // ['prop1', 'value1']

objectKey

Returns a random key from given object.

Available since v6.3.0

Parameters

NameTypeDefaultDescription
<T>Record<string, unknown>

The type of the object to select from.

objectT

The object to be used.

Returns: keyof T

Throws: If the given object is empty.

ts
function objectKey<const T extends Record<string, unknown>>(object: T): keyof T;

Examples

ts
faker.helpers.objectKey({ myProperty: 'myValue' }) // 'myProperty'

objectValue

Returns a random value from given object.

Available since v6.3.0

Parameters

NameTypeDefaultDescription
<T>Record<string, unknown>

The type of object to select from.

objectT

The object to be used.

Returns: T[keyof T]

Throws: If the given object is empty.

ts
function objectValue<const T extends Record<string, unknown>>(
  object: T
): T[keyof T];

Examples

ts
faker.helpers.objectValue({ myProperty: 'myValue' }) // 'myValue'

rangeToNumber

Helper method that converts the given number or range to a number.

Available since v8.0.0

Parameters

NameTypeDefaultDescription
numberOrRangenumber | { ... }

The number or range to convert.

numberOrRange.maxnumber

The maximum value for the range.

numberOrRange.minnumber

The minimum value for the range.

Returns: number

ts
function rangeToNumber(
  numberOrRange:
    | number
    | {
        min: number;
        max: number;
      }
): number;

Examples

ts
faker.helpers.rangeToNumber(1) // 1
faker.helpers.rangeToNumber({ min: 1, max: 10 }) // 5

replaceCreditCardSymbols

Replaces the symbols and patterns in a credit card schema including Luhn checksum.

This method supports both range patterns [4-9] as well as the patterns used by replaceSymbolWithNumber(). L will be replaced with the appropriate Luhn checksum.

Available since v5.0.0

Parameters

NameTypeDefaultDescription
stringstring'6453-####-####-####-###L'

The credit card format pattern.

symbolstring'#'

The symbol to replace with a digit.

Returns: string

ts
function replaceCreditCardSymbols(
  string: string = '6453-####-####-####-###L',
  symbol: string = '#'
): string;

Examples

ts
faker.helpers.replaceCreditCardSymbols() // '6453-4876-8626-8995-3771'
faker.helpers.replaceCreditCardSymbols('1234-[4-9]-##!!-L') // '1234-9-5298-2'

replaceSymbols

Parses the given string symbol by symbols and replaces the placeholder appropriately.

  • # will be replaced with a digit (0 - 9).
  • ? will be replaced with an upper letter ('A' - 'Z')
  • and * will be replaced with either a digit or letter.

Available since v3.0.0

Parameters

NameTypeDefaultDescription
stringstring''

The template string to parse.

Returns: string

ts
function replaceSymbols(string: string = ''): string;

Examples

ts
faker.helpers.replaceSymbols() // ''
faker.helpers.replaceSymbols('#####') // '98441'
faker.helpers.replaceSymbols('?????') // 'ZYRQQ'
faker.helpers.replaceSymbols('*****') // '4Z3P7'
faker.helpers.replaceSymbols('Your pin is: #?*#?*') // 'Your pin is: 0T85L1'

shuffle

Returns a randomized version of the array.

Available since v2.0.1

Parameters

NameTypeDefaultDescription
<T>any

The type of the elements to shuffle.

listT[]

The array to shuffle.

options?{ ... }{}

The options to use when shuffling.

options.inplace?booleanfalse

Whether to shuffle the array in place or return a new array.

Returns: T[]

ts
function shuffle<const T>(
  list: T[],
  options?: {
    inplace?: boolean;
  }
): T[];

Examples

ts
faker.helpers.shuffle(['a', 'b', 'c']) // [ 'b', 'c', 'a' ]
faker.helpers.shuffle(['a', 'b', 'c'], { inplace: true }) // [ 'b', 'c', 'a' ]
faker.helpers.shuffle(['a', 'b', 'c'], { inplace: false }) // [ 'b', 'c', 'a' ]

slugify

Slugifies the given string. For that all spaces ( ) are replaced by hyphens (-) and most non word characters except for dots and hyphens will be removed.

Available since v2.0.1

Parameters

NameTypeDefaultDescription
stringstring''

The input to slugify.

Returns: string

ts
function slugify(string: string = ''): string;

Examples

ts
faker.helpers.slugify() // ''
faker.helpers.slugify("Hello world!") // 'Hello-world'

uniqueArray

Takes an array of strings or function that returns a string and outputs a unique array of strings based on that source. This method does not store the unique state between invocations.

If there are not enough unique values to satisfy the length, if the source is an array, it will only return as many items as are in the array. If the source is a function, it will return after a maximum number of attempts has been reached.

Available since v6.0.0

Parameters

NameTypeDefaultDescription
<T>any

The type of the elements.

sourceT[] | (() => T)

The strings to choose from or a function that generates a string.

lengthnumber

The number of elements to generate.

Returns: T[]

ts
function uniqueArray<const T>(
  source: ReadonlyArray<T> | (() => T),
  length: number
): T[];

Examples

ts
faker.helpers.uniqueArray(faker.word.sample, 50)
faker.helpers.uniqueArray(faker.definitions.person.first_name, 6)
faker.helpers.uniqueArray(["Hello", "World", "Goodbye"], 2)

weightedArrayElement

Returns a weighted random element from the given array. Each element of the array should be an object with two keys weight and value.

  • Each weight key should be a number representing the probability of selecting the value, relative to the sum of the weights. Weights can be any positive float or integer.
  • Each value key should be the corresponding value.

For example, if there are two values A and B, with weights 1 and 2 respectively, then the probability of picking A is 1/3 and the probability of picking B is 2/3.

Available since v8.0.0

Parameters

NameTypeDefaultDescription
<T>any

The type of the elements to pick from.

arrayArray<{ ... }>

Array to pick the value from.

array[].valueT

The value to pick.

array[].weightnumber

The weight of the value.

Returns: T

ts
function weightedArrayElement<const T>(
  array: ReadonlyArray<{
    weight: number;
    value: T;
  }>
): T;

Examples

ts
faker.helpers.weightedArrayElement([{ weight: 5, value: 'sunny' }, { weight: 4, value: 'rainy' }, { weight: 1, value: 'snowy' }]) // 'sunny', 50% of the time, 'rainy' 40% of the time, 'snowy' 10% of the time

Released under the MIT License.