-
-
Save johnelliott/cf77003f72f889abbc3f32785fa3df8d to your computer and use it in GitHub Desktop.
import { v4 as uuid } from 'uuid'; | |
export function generateId() { | |
return uuid(); | |
} | |
const v4 = new RegExp(/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i); | |
console.log(generateId().match(v4)); | |
//console.log(generateId().length) | |
//console.log('new way') | |
//console.log(generateId().length) | |
//console.log('new way, chopped') | |
//console.log(generateId().split('-')[0]) | |
//console.log('old way') | |
//const generateNumber = () => Math.ceil(Math.random() * 100) | |
//console.log(`${generateNumber()}${generateNumber()}${generateNumber()}${generateNumber()}`) | |
// run with $ node_modules/.bin/babel-node testuuid.js |
@gastrodon the alias is common, since it is just the version and v4 is not a good naming. But I agree that generateId
is not the best thing here since you can alias the v4 as generateId
and will be the same outcome.
To me looks like this was part of a bigger file and was just extracted the meaningful parts for the test.
I had to change the regex to lowercase as that seems to be what v4 is creating for me.
[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}
supporting lower or upper case
^[0-9(a-f|A-F)]{8}-[0-9(a-f|A-F)]{4}-4[0-9(a-f|A-F)]{3}-[89ab][0-9(a-f|A-F)]{3}-[0-9(a-f|A-F)]{12}$
The trailing /i
means a case insensitive search. RE the last two comments.
@juanmartinez-viamericas A capture group (the parentheses) is not allowed in a range (the brackets), so your regex allows to put parentheses and pipres in uuids. And your "insensitive regex without flag" doesn't allow this range [89ab]
in uppercase.
/^[0-9(a-f|A-F)]{8}-[0-9(a-f|A-F)]{4}-4[0-9(a-f|A-F)]{3}-[89ab][0-9(a-f|A-F)]{3}-[0-9(a-f|A-F)]{12}$/
.test('376)5f8c-e686-4b(9-a85b-7e31|8f4062c') // returns true
// ^ ^ ^
/^[0-9(a-f|A-F)]{8}-[0-9(a-f|A-F)]{4}-4[0-9(a-f|A-F)]{3}-[89ab][0-9(a-f|A-F)]{3}-[0-9(a-f|A-F)]{12}$/
.test('376a5f8c-e686-4b79-A85b-7e31e8f4062c') // returns false
// ^
Using regex to support upper/lowercase is totally bonkers. If you expect it to be uppercase / not, assert that the string is uppercase / not . If you don't know, just normalize your data first. Pointed out by @Mars073 the lower/upper regex also adds unnecessarily complexity that can break things
Why in the world would you alias
v4 as uuid
and THEN wrap it ingenerateId
??