luhn-generator
Version:
A generator of numbers that passes the validation of Luhn algorithm or Luhn formula, also known as the 'modulus 10' or 'mod 10' algorithm
119 lines (110 loc) • 2.51 kB
JavaScript
export const autocomplete = {
stateTerms: ['on', 'off'],
standaloneTerms: [
'name',
'honorific-prefix',
'given-name',
'additional-name',
'family-name',
'honorific-suffix',
'nickname',
'username',
'new-password',
'current-password',
'organization-title',
'organization',
'street-address',
'address-line1',
'address-line2',
'address-line3',
'address-level4',
'address-level3',
'address-level2',
'address-level1',
'country',
'country-name',
'postal-code',
'cc-name',
'cc-given-name',
'cc-additional-name',
'cc-family-name',
'cc-number',
'cc-exp',
'cc-exp-month',
'cc-exp-year',
'cc-csc',
'cc-type',
'transaction-currency',
'transaction-amount',
'language',
'bday',
'bday-day',
'bday-month',
'bday-year',
'sex',
'url',
'photo',
'one-time-code'
],
qualifiers: ['home', 'work', 'mobile', 'fax', 'pager'],
qualifiedTerms: [
'tel',
'tel-country-code',
'tel-national',
'tel-area-code',
'tel-local',
'tel-local-prefix',
'tel-local-suffix',
'tel-extension',
'email',
'impp'
],
locations: ['billing', 'shipping']
};
function isValidAutocomplete(
autocompleteValue,
{
looseTyped = false,
stateTerms = [],
locations = [],
qualifiers = [],
standaloneTerms = [],
qualifiedTerms = []
} = {}
) {
autocompleteValue = autocompleteValue.toLowerCase().trim();
stateTerms = stateTerms.concat(autocomplete.stateTerms);
if (stateTerms.includes(autocompleteValue) || autocompleteValue === '') {
return true;
}
qualifiers = qualifiers.concat(autocomplete.qualifiers);
locations = locations.concat(autocomplete.locations);
standaloneTerms = standaloneTerms.concat(autocomplete.standaloneTerms);
qualifiedTerms = qualifiedTerms.concat(autocomplete.qualifiedTerms);
const autocompleteTerms = autocompleteValue.split(/\s+/g);
if (!looseTyped) {
if (
autocompleteTerms[0].length > 8 &&
autocompleteTerms[0].substr(0, 8) === 'section-'
) {
autocompleteTerms.shift();
}
if (locations.includes(autocompleteTerms[0])) {
autocompleteTerms.shift();
}
if (qualifiers.includes(autocompleteTerms[0])) {
autocompleteTerms.shift();
// only quantifiers allowed at this point
standaloneTerms = [];
}
if (autocompleteTerms.length !== 1) {
return false;
}
}
const purposeTerm = autocompleteTerms[autocompleteTerms.length - 1];
return (
standaloneTerms.includes(purposeTerm) ||
qualifiedTerms.includes(purposeTerm)
);
}
export default isValidAutocomplete;