strcase icon indicating copy to clipboard operation
strcase copied to clipboard

Number word boundary bug

Open jpotterm opened this issue 5 years ago • 7 comments

Numbers usually act as word boundaries, but not always (which I believe is a bug). Here are inconsistent test cases:

strcase.ToSnake("1A2") // 1a_2
strcase.ToSnake("A1B") // a_1_b

jpotterm avatar Jan 28 '20 18:01 jpotterm

I also have this problem in this case:

strcase.ToSnake("ID3") // returns id_3 but I think it should return id3
strcase.ToSnake("ID3v2_3") // returns id_3_v2_3 but I think it should return id3_v2_3

version commit I use: 16388991a33441046539eb716cff4d294d556c70

nasermirzaei89 avatar May 14 '20 14:05 nasermirzaei89

#24 introduces the change for @jpotterm with these tests:

https://github.com/iancoleman/strcase/blob/23e9d4e5c09d4767bb6a4d9fdc49a9d548b70898/snake_test.go#L51-L52

@nasermirzaei89 I'm not sure what the particular rule would be to differentiate those particular cases, can you describe the intention please? It looks like maybe you mean "any numbers following the token 'ID' or 'v' should be considered part of that token and not split from it"? Is it specifically for <ID|V>+?

The current rule is that numbers act as word boundaries, so ToSnake("ID3v2_3") gives "id_3_v_2_3".

iancoleman avatar Aug 17 '20 23:08 iancoleman

I think the intention is to only introduce delimiters after numbers, not before them. This is a super easy change with my recent contributions, see here. I'd also prefer this behavior but didn't include it in #24 since the current behavior isn't necessarily wrong so it feels a little more like a breaking change.

NathanBaulch avatar Aug 17 '20 23:08 NathanBaulch

@iancoleman I think the solution of @NathanBaulch is good. You should check if it doesn't break any other cases. Thanks for the follow up 🎉

nasermirzaei89 avatar Aug 18 '20 06:08 nasermirzaei89

#24 is looks merged, however it doesn't solve the numbering issue: ID3v2_3 should become id3_v2_3 but currently it gives id_3_v_2_3 or is there a config/param that i can't find to switch between the 2 methods?

rami-dabain avatar Oct 18 '20 16:10 rami-dabain

There are some many possibilities here, that I doubt you can make this work for everyone without introducing a bunch of configuration options. In my case I am looking at Position3D being changed to position_3_d, which I would prefer to be position_3d.

wichert avatar Dec 21 '21 15:12 wichert

I have faced the same issue. I want Int8Value -> int8_value but strcase generates int_8_value. I have tried to strcase.ConfigureAcronym("Int8", "int8") but it didn't help. That would be awesome to use numbers in acronyms (the issue above can be solved via adding 3D to acronyms) and adding a config parameter to attach trailing numbers would be another convenient way.

amanenk avatar Feb 16 '22 16:02 amanenk