@compwright/humanparser
Version:
Parse a human name string into salutation, first name, middle name, last name, suffix. Parse an address into address, city, state, zip
300 lines (286 loc) • 6.48 kB
JavaScript
//TODO: parseName
//John A. Doe, CAI, CES, CAGA
//John (Johnnie) Doe
//John "Johnnie" Doe
//TODO: getUsableName(str, idx)
//John Doe & Jim Duncan
//John Doe, Senior Whatever
const chai = require('chai');
const expect = chai.expect;
const human = require('..');
// `describe` makes a "suite" of tests; think of them as a group.
describe('Parsing names', () => {
const names = [
{
name: 'Mr. William R. Hearst, III',
result: {
salutation: 'Mr.',
firstName: 'William',
middleName: 'R.',
lastName: 'Hearst',
suffix: 'III',
fullName: 'Mr. William R. Hearst, III'
}
}, {
name: 'William Randolph Hearst',
result: {
firstName: 'William',
lastName: 'Hearst',
middleName: 'Randolph',
fullName: 'William Randolph Hearst'
}
}, {
name: 'William R. De La Cruz',
result: {
firstName: 'William',
lastName: 'De La Cruz',
middleName: 'R.',
fullName: 'William R. De La Cruz'
}
}, {
name: 'Mr. William R. De La Cruz III',
result: {
salutation: 'Mr.',
firstName: 'William',
suffix: 'III',
lastName: 'De La Cruz',
middleName: 'R.',
fullName: 'Mr. William R. De La Cruz III'
}
}, {
name: 'William De Cruz',
result: {
firstName: 'William',
lastName: 'De Cruz',
fullName: 'William De Cruz'
}
}, {
name: 'William De La Cruz',
result: {
firstName: 'William',
lastName: 'De La Cruz',
fullName: 'William De La Cruz'
}
}, {
name: 'Mr. William R. Hugh Calum De La Cruz III',
result: {
salutation: 'Mr.',
firstName: 'William',
suffix: 'III',
lastName: 'De La Cruz',
middleName: 'R. Hugh Calum',
fullName: 'Mr. William R. Hugh Calum De La Cruz III'
}
}, {
name: 'William A. B. De La Cruz',
result: {
firstName: 'William',
middleName: 'A. B.',
lastName: 'De La Cruz',
fullName: 'William A. B. De La Cruz'
}
}, {
name: 'James Hugh Calum Laurie',
result: {
firstName: 'James',
middleName: 'Hugh Calum',
lastName: 'Laurie',
fullName: 'James Hugh Calum Laurie'
}
}, {
name: 'Kiefer William Frederick Dempsey George Rufus Sutherland',
result: {
firstName: 'Kiefer',
middleName: 'William Frederick Dempsey George Rufus',
lastName: 'Sutherland',
fullName: 'Kiefer William Frederick Dempsey George Rufus Sutherland'
}
}, {
name: 'William Hearst',
result: {
firstName: 'William',
lastName: 'Hearst',
fullName: 'William Hearst'
}
}, {
name: 'William Hearst Jr',
result: {
firstName: 'William',
suffix: 'Jr',
lastName: 'Hearst',
fullName: 'William Hearst Jr'
}
}, {
name: 'Hearst, William Jr',
result: {
firstName: 'William',
suffix: 'Jr',
lastName: 'Hearst',
fullName: 'William Hearst Jr'
}
}, {
name: 'Hearst, William Randolph',
result: {
firstName: 'William',
lastName: 'Hearst',
middleName: 'Randolph',
fullName: 'William Randolph Hearst'
}
}, {
name: 'Hearst Jr., William Randolph',
result: {
firstName: 'William',
lastName: 'Hearst',
middleName: 'Randolph',
suffix: 'Jr.',
fullName: 'William Randolph Hearst Jr.'
}
}, {
name: 'Hearst, William, M.D.',
result: {
firstName: 'William',
suffix: 'M.D.',
lastName: 'Hearst',
fullName: 'William Hearst M.D.'
}
}, {
name: 'William',
result: {
firstName: 'William',
lastName: '',
fullName: 'William'
}
}, {
name: 'Mr. Hearst',
result: {
salutation: 'Mr.',
lastName: 'Hearst',
fullName: 'Mr. Hearst'
}
}, {
name: 'Mr. Hearst Jr.',
result: {
salutation: 'Mr.',
lastName: 'Hearst',
suffix: 'Jr.',
fullName: 'Mr. Hearst Jr.'
}
}, {
name: 'hussain al robeh',
result: {
firstName: 'hussain',
lastName: 'al robeh',
fullName: 'hussain al robeh'
}
}, {
name: 'EUGENE L. NATH,JR.',
result: {
firstName: 'EUGENE',
middleName: 'L.',
lastName: 'NATH',
suffix: 'JR.',
fullName: 'EUGENE L. NATH,JR.'
}
}, {
name: 'LEE TANT , JR',
result: {
firstName: 'LEE',
lastName: 'TANT',
suffix: 'JR',
fullName: 'LEE TANT , JR'
}
}, {
name: '',
result: {
firstName: '',
lastName: '',
fullName: ''
}
}, {
name: 'Tuan Syed Azmin Nur',
result: {
salutation: 'Tuan',
firstName: 'Syed',
middleName: 'Azmin',
lastName: 'Nur',
fullName: 'Tuan Syed Azmin Nur'
}
}
];
const fullest = [
{
name: 'John & Peggy Sue',
result: {
fullName: 'Peggy Sue'
}
}, {
name: 'John and Peggy Sue',
result: {
fullName: 'Peggy Sue'
}
}, {
name: 'Jane and Mr. William R. De La Cruz III',
result: {
fullName: 'Mr. William R. De La Cruz III'
}
}
];
const addresses = [
{
address: '123 W. Happy Day Blvd., San Francisco, CA 90501',
result: {
address: '123 W. Happy Day Blvd.',
city: 'San Francisco',
state: 'CA',
zip: '90501',
fullAddress: '123 W. Happy Day Blvd., San Francisco, CA 90501'
}
}, {
address: '123 Happy Street, Honolulu, HI 65780',
result: {
address: '123 Happy Street',
city: 'Honolulu',
state: 'HI',
zip: '65780',
fullAddress: '123 Happy Street, Honolulu, HI 65780'
}
}, {
address: '123 Happy Street, Suite #101, Honolulu, HI 65780',
result: {
address: '123 Happy Street, Suite #101',
city: 'Honolulu',
state: 'HI',
zip: '65780',
fullAddress: '123 Happy Street, Suite #101, Honolulu, HI 65780'
}
}, {
// parse newlines as commas
address: '1234 California St.\nApt. #594\nSan Francisco, CA 94109',
result: {
address: '1234 California St., Apt. #594',
city: 'San Francisco',
state: 'CA',
zip: '94109',
fullAddress: '1234 California St., Apt. #594, San Francisco, CA 94109'
}
}
];
it('Should parse all name attributes', () => {
names.forEach((name, i, list) => {
const parsed = human.parseName(name.name);
expect(name.result).to.eql(parsed);
});
});
it('Should parse fullest name', () => {
fullest.forEach((name, i, list) => {
const fullName = human.getFullestName(name.name);
expect(name.result.fullName).to.eql(fullName);
});
});
it('Should parse all address attributes', () => {
addresses.forEach((address, i, list) => {
const parsed = human.parseAddress(address.address);
expect(address.result).to.eql(parsed);
});
});
});