From ee23950b70279b5403a801eead804b59ac9b87ba Mon Sep 17 00:00:00 2001 From: Danny Guo Date: Fri, 2 Mar 2018 17:31:17 -0500 Subject: [PATCH] Handle more edge cases 1. Disallow underscores 2. Allow single character usernames 3. Allow multiple hyphens, as long as they aren't next to each other --- README.md | 3 +++ index.js | 4 ++-- test.js | 8 ++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f718421..76539a7 100644 --- a/README.md +++ b/README.md @@ -21,11 +21,14 @@ regex().test('foo-bar'); // => true regex().test('foobar'); // => true regex().test('3foobar'); // => true regex().test('3foo-bar'); // => true +regex().test('foo-bar-baz'); // => true +regex().test('f'); // => true regex().test('foo-bar-'); // => false regex().test('-foo-bar'); // => false regex().test('foo--bar'); // => false regex().test('~derp@darp---++asdf'); // => false regex().test('derp@mail.com'); // => false +regex().test('foo_bar'); // => false ``` ## Why? diff --git a/index.js b/index.js index 291568a..17b5c9f 100644 --- a/index.js +++ b/index.js @@ -2,7 +2,7 @@ * Expose username regex, following github conventions * like: * _Username may only contain alphanumeric characters - * and only single hyphen, and cannot begin or end with hyphen._ + * and only single hyphens, and cannot begin or end with a hyphen._ * * * Example input: @@ -10,5 +10,5 @@ * foo-bar */ module.exports = function regexUsername () { - return /^\w+-?\w+(?!-)$/; + return /^([a-z\d]+-)*[a-z\d]+$/i; }; diff --git a/test.js b/test.js index 14894eb..759d8fa 100644 --- a/test.js +++ b/test.js @@ -11,14 +11,22 @@ describe('username regex', function() { it('should match username input', function() { assert.equal(regex().test('foobar'), true); assert.equal(regex().test('foo-bar'), true); + assert.equal(regex().test('FooBar'), true); + assert.equal(regex().test('FOOBAR'), true); + assert.equal(regex().test('foo-bar-baz'), true); + assert.equal(regex().test('f'), true); }); it('should catch incorrect input', function() { assert.equal(regex().test('-foo'), false); assert.equal(regex().test('foo-'), false); + assert.equal(regex().test('-'), false); assert.equal(regex().test('foo--bar'), false); assert.equal(regex().test('foo-bar-'), false); assert.equal(regex().test('3tobi--ferret'), false); assert.equal(regex().test('~~derp@darp-----++asdfasdf'), false); + assert.equal(regex().test('foo_bar'), false); + assert.equal(regex().test('_foobar'), false); + assert.equal(regex().test('foobar_'), false); }); });