Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/jettcalleja/csv-validator

nodejs validator for csv file
https://github.com/jettcalleja/csv-validator

csv csv-validator nodejs validator

Last synced: 3 months ago
JSON representation

nodejs validator for csv file

Awesome Lists containing this project

README

        

# `csv-validator`

nodejs validator for csv file

# Features

* Parse csv (supports only file as of now) and convert to json array
* Validate each line with type or RegExp
* Return each line's error with error message
* Support callback and promise
* Non-blocking parsing

# Install

```sh
npm install csv-validator --save
```

# Example

Without errors:

```javascript
/** csv file
name,phone,email,country
john,123,[email protected],PH
doe,456,[email protected],US
*/

const csv = require('csv-validator');
const csvFilePath = '';
const headers = {
name: '', // any string
phone: 1, // any number
email: /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, // RegExp
_country: '' // add '_' as first character of the key to indicate as optional
};

csv(csvFilePath, headers)
.then(console.log) // [ { name: 'john', phone: '123', email: '[email protected]', country: 'PH' }, { name: 'doe', phone: '456', email: '[email protected]', country: 'US' } ]
```

With error:

```javascript
/** csv file
name,phone,email,country
john,123a,[email protected],PH
doe,456,[email protected]
*/

const csv = require('csv-validator');
const csvFilePath = '';
const headers = {
name: '', // any string
phone: 1, // any number
email: /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, // RegExp
country: '' // add '_' as first character of the key to indicate as optional
};

csv(csvFilePath, headers)
.then(console.log)
.catch(console.error) // [ 'Row 1: phone must be a type number', 'Row 2: country is required' ]
```

Error messages:

* **... must be a type number**: the column should be a number
* **... is required**: the column should be filled
* **... must be in /^[0-9]?.*/**: the column should be in RegExp (in this example: /^[0-9]?$/)

# Contribution

* Any pull request for new features and bug fixes is appreciated.
* Just make sure to add test.

# LICENSE

MIT