Skip to content
This repository was archived by the owner on Oct 20, 2021. It is now read-only.

Commit b0160fd

Browse files
feat(rules): Added Isrc rule
1 parent ce9959c commit b0160fd

5 files changed

Lines changed: 80 additions & 0 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ The library can be loaded either as a standalone script, or through an [AMD](htt
152152
- [IntType](docs/int-type.md)
153153
- [IntVal](docs/int-val.md)
154154
- [Ip](docs/ip.md)
155+
- [Isrc](docs/isrc.md)
155156
- [Iterable](docs/iterable.md)
156157
- [Json](docs/json.md)
157158
- [KeyNested](docs/key-nested.md)

docs/isrc.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Isrc
2+
3+
Validates if the input is isrc.
4+
5+
Valid values:
6+
7+
```js
8+
validator.isrc().validate('USAT29900609');
9+
validator.isrc().validate('GBAYE6800011');
10+
validator.isrc().validate('USRC15705223');
11+
validator.isrc().validate('USCA29500702');
12+
```
13+
14+
Invalid values:
15+
16+
```js
17+
validator.isrc().validate('USAT2990060');
18+
validator.isrc().validate('SRC15705223');
19+
validator.isrc().validate('US-CA29500702');
20+
validator.isrc().validate('USARC15705223');
21+
```

src/rules/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ export * from './instance-of';
7070
export * from './int-type';
7171
export * from './int-val';
7272
export * from './ip';
73+
export * from './isrc';
7374
export * from './iterable';
7475
export * from './json';
7576
export * from './key-nested';

src/rules/isrc.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { AbstractRegex } from './abstract-regex';
2+
3+
export class Isrc extends AbstractRegex {
4+
5+
/**
6+
* Get pattern.
7+
*/
8+
protected getPattern(): string | RegExp {
9+
return /^[A-Z]{2}[0-9A-Z]{3}\d{2}\d{5}$/;
10+
}
11+
}
12+
13+
export default Isrc;

test/rules/isrc.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { assert } from 'chai';
2+
3+
import { AbstractRule } from '../../src/rules/abstract-rule';
4+
import { Isrc } from '../../src/rules/isrc';
5+
6+
describe('Isrc', () => {
7+
8+
let isrc: Isrc;
9+
10+
beforeEach(() => {
11+
isrc = new Isrc();
12+
});
13+
14+
it('is rule', () => {
15+
assert.instanceOf(isrc, AbstractRule);
16+
});
17+
18+
it('values is valid', () => {
19+
assert.isTrue(isrc.validate('USAT29900609'));
20+
assert.isTrue(isrc.validate('GBAYE6800011'));
21+
assert.isTrue(isrc.validate('USRC15705223'));
22+
assert.isTrue(isrc.validate('USCA29500702'));
23+
});
24+
25+
it('values is not valid', () => {
26+
assert.isFalse(isrc.validate(''));
27+
assert.isFalse(isrc.validate('USAT2990060'));
28+
assert.isFalse(isrc.validate('SRC15705223'));
29+
assert.isFalse(isrc.validate('US-CA29500702'));
30+
assert.isFalse(isrc.validate('USARC15705223'));
31+
assert.isFalse(isrc.validate(null));
32+
assert.isFalse(isrc.validate(undefined));
33+
assert.isFalse(isrc.validate(true));
34+
assert.isFalse(isrc.validate(false));
35+
assert.isFalse(isrc.validate([]));
36+
assert.isFalse(isrc.validate({}));
37+
assert.isFalse(isrc.validate(new Array('foo')));
38+
assert.isFalse(isrc.validate(new Object({foo: 'bar'})));
39+
40+
class Foo {}
41+
assert.isFalse(isrc.validate(new Foo()));
42+
});
43+
44+
});

0 commit comments

Comments
 (0)