Skip to content

Instantly share code, notes, and snippets.

@DanOswalt
Last active February 17, 2019 00:47
Show Gist options
  • Save DanOswalt/640727408d21acc9260a4c3124277e04 to your computer and use it in GitHub Desktop.
Save DanOswalt/640727408d21acc9260a4c3124277e04 to your computer and use it in GitHub Desktop.
Pronounceable Random String function
// returns a random string that is english-ish.
// if no params passed, will return a lowercase string between 3 and 8 letters.
// 1st arg option to pass in boolean for caplitalizing first letter for proper names (default false)
// 2nd arg option to pass in min chars (default 3)
// 3rd arg option to pass in max chars (default 8)
function pronounceableRandomString(cap, min, max) {
function randBetween(min, max) {
return Math.floor(Math.random()*(max-min+1)+min);
}
var minChars = min || 3;
var maxChars = max || 8;
var capitalize = cap == false ? false : true;
if (typeof capitalize !== "boolean" || typeof minChars !== "number" || typeof maxChars !== "number") {
return "Err: Bad Args";
}
if (minChars > maxChars) return "Err: Num Chars";
var chars = randBetween(minChars,maxChars);
var pattern = randBetween(0,2);
var str = "";
var vowelChunk = [
'a','a','a','a','a','a','a','a','a','a',
'e','e','e','e','e','e','e','e','e','e',
'o','o','o','o','o','o','o','o','o','o',
'i','i','i','i','i','u','u','u','u','u',
'ae','ai','au','aa','ea','ee','ei','eu','ia','ie',
'io','ua','ue','ui','uo','eau','oa','oi','ou','ea'
];
var firstConsonentChunk = [
'b','c','d','f','g','h','j','k','l','m',
'n','n','p','q','r','s','t','u','v','x',
'y','z','ch','sh','ph','th','st','str','sk','sp',
'kr','cl','qu','fr','bl','pl','tr','tw','dr','br',
'gh','gr','gl','pr','zh','fl','cl','cr','chr','spr',
'r','s','t','l','n','r','s','t','l','n'
];
var consonentChunk = [
'b','c','d','f','g','h','j','k','l','m',
'n','n','p','q','r','s','t','u','v','x',
'y','z','ch','sh','ph','th','st','str','sk','sp',
'ss','tt','qu','mm','nn','gg','tr','rt','lt','ft',
'gh','rg','dd','rp','ll','ck','rf','cr','chr','spr',
'r','s','t','l','n','r','s','t','l','n'
];
if(pattern < 2 ) {
str = firstConsonentChunk[randBetween(0,firstConsonentChunk.length - 1)] +
vowelChunk[randBetween(0,vowelChunk.length - 1)] +
consonentChunk[randBetween(0,consonentChunk.length - 1)] +
vowelChunk[randBetween(0,vowelChunk.length - 1)] +
consonentChunk[randBetween(0,consonentChunk.length - 1)];
} else {
str = vowelChunk[randBetween(0,vowelChunk.length - 1)] +
consonentChunk[randBetween(0,consonentChunk.length - 1)] +
vowelChunk[randBetween(0,vowelChunk.length - 1)] +
consonentChunk[randBetween(0,consonentChunk.length - 1)] +
vowelChunk[randBetween(0,vowelChunk.length - 1)];
}
if (capitalize) {
str = str.charAt(0).toUpperCase() + str.slice(1);
}
str = str.substr(0,chars);
return str;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment