Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

ajv-currency

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ajv-currency

A currency validator / parser for ajv with the keyword "currency" (and friends)

  • 1.0.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
0
Maintainers
1
Weekly downloads
 
Created
Source

Currency string validation and parsing for AJV

This module exports a single function which adds the currency validation keywords 'currency-en', 'currency-eu', and 'currency' and the currency parsing keywords 'currency-en-value', 'currency-eu-value', and 'currency-value' to Ajv instance, like so:

// Create an ajv instance
var Ajv = require("ajv");
var ajv = new Ajv();

// Add the currency keywords to the instance
require("ajv-currency")(ajv);

Validation

With the keywords added to out ajv instance, English (-en) and European (-eu) style strings can be validated like so:

ajv.validate({"currency-en":true},"$1,234,567.89");        // true
ajv.validate({"currency-en":true},"$-1,234,567.89");       // true
ajv.validate({"currency-eu":true},"\u20ac1.234.567,89");   // true
ajv.validate({"currency-eu":true},"\u20ac(1.234.567,89)"); // true
ajv.validate({"currency-eu":true},"(\u00a51.234.567,89)"); // true

ajv.validate({"currency-en":true},"$12,34,567.89");       // false
ajv.validate({"currency-en":true},"$-1,234,56789");       // false
ajv.validate({"currency-eu":true},"\u20ac1.2345.67,89");  // false
ajv.validate({"currency-eu":true},"\u20ac(1.234567,89)"); // false
ajv.validate({"currency-eu":true},"(\u00a51234.567,89)"); // false

Alternatively, the decimal, separator, and (optionally) the symbol may be specified with the keyword "currency" like so:

ajv.validate({"currency":{"separator":",","decimal":"."}},"$1,234,567.89"); // true
ajv.validate({"currency":{"separator":".","decimal":","}},"$1.234.567,89"); // true

and defaults for decimal, separator, and currency may be specified when loading the plug in:

var ajv = new Ajv();
require("ajv-currency")(ajv,{"separator":",","decimal":"."}); // same as the default

ajv.validate({"currency":true},"$1,234,567.89"); // true
ajv.validate({"currency":true},"$1.234.567,89"); // false

// Defaults can be overridden in the schema:
ajv.validate({"currency":{"separator":".","decimal":","}},"$1.234.567,89"); // true

The extended (perl style) regular expressions library xregexp is used rather than JavaScript's Regular Expressions to take advantage of the included unicode currency range item (\p{Sc}), and by default, the any of the Unicode currency symbols may appear at the start of the number string.

// Create a custom validator
var weird_ccy_validator = 
	ajv.compile({ 
		"currency":{
		   	"decimal":"v",
			"separator":"_",
			"symbol":"\u20ac" // the euro symbol (€) 
		},
	})

weird_ccy_validator("\u20ac(1_234_567v89)"); // true: euro symbol
weird_ccy_validator("(1_234_567v89)");       // true: currency symbol is not required
weird_ccy_validator("$(1_234_567v89)");      // false: wrong currency symbol

String Parsing

In addition to validation, string to attributes can be parsed and replaced with the numeric value, using any of the -value keywords, like so:

// Coerce (parse) an currency string in the English format
var parse_amount = 
	ajv.compile({ 
		type:"object",
		"properties":{
			"amount":{
				"currency-en-value":true
			}
		},
	});
var x = {amount:"\u20ac(1,234,567.89)"}
parse_amount(x) // true
x.amount // -1234567.89

// Coerce (parse) an currency string with a strange format
var parse_weird_amount = 
	ajv.compile({ 
		"properties":{ 
			"amount":{
				"currency-value":{
					"decimal":"v",
					"separator":"_",
					"symbol":"\u20ac" // Optional: see note above.
				}
			}
		},
	})

var x = {amount:"\u20ac(1_234_567v89)"}
parse_weird_amount(x); // true
x.amount // -1234567.89

Keywords

FAQs

Package last updated on 20 Jun 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc