0

I have this regex in place:

^(?=(.{0,63}[^\.]@.{1,255}))(?!.*[.?]{2})([!#$%&'*+\-\/=?\^_`{|}~a-zA-Z0-9}]{1,64}(\.[!#$%&'*+\-\/=?\^_`{|}~a-zA-Z0-9]{0,}){0,})@((\[(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}\])|([a-zA-Z0-9-]{1,63}(\.[a-zA-Z0-9-]{2,63}){1,}))$

And is working very well.

I'd like to restrict it to allow only 200chars. How can I achieve this?

I don't want it to accept emails like:

1000110001100011000110001100011000110001100011000110001100111111@1000110001100011000110001100011000110001100011000110001100.1231231323123123123123123123123123123123123123ss.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.asdasdasdasdasdadsadsadadsadas.adsadasdadsadsadasdasdadsas.asdasdasdasdasdasdasdasd.asdasdasdasdasd.1231231231sadsa.comsss

Thank you,

VictorNavarro
  • 75
  • 1
  • 4
  • Based on your first pattern (63 characters before the @ and 255 after), you might want to allow a max of 319 characters. Not like to occur, but if someone does have a long domain name, the first part would accept it, but the final length check (provided below by Vladimir) would reject it – Sparky May 06 '19 at 11:46
  • ^((?=(.{0,63}[^\.]@.{1,255}))(?!.*[.?]{2})([!#$%&'*+\-\/=?\^_`{|}~a-zA-Z0-9}]{1,64}(\.[!#$%&'*+\-\/=?\^_`{|}~a-zA-Z0-9]{0,}){0,})@((\[(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}\])|([a-zA-Z0-9-]{1,63}(\.[a-zA-Z0-9-]{2,63}){1,}))){1,200}$ – VictorNavarro May 06 '19 at 12:23
  • it does not work – VictorNavarro May 06 '19 at 12:23
  • 1
    You can add a lookahead at start to fail: [`^(?!.{201})`...](https://regex101.com/r/cF6s2J/1) – bobble bubble May 06 '19 at 13:00
  • that's the correct answer! thanks! – VictorNavarro May 06 '19 at 13:10
  • @user9908175 I put it as an answer. You're welcome! – bobble bubble May 06 '19 at 13:21

2 Answers2

1

To restrict length you have to use {minLength,maxLength}, for example:

/^[a-z]{1,200}$/

this regex will accept only strings which contains [a-z] up to 200 chars.

In you case it must be something like: ^(... your long pattern ...){1,200}$

cn007b
  • 16,596
  • 7
  • 59
  • 74
1

I don't know if it's a good idea to use regex for email validation but to restrict length of what's your pattern matching, you can use a positive or negative lookahead at start of the string.

^(?!.{201})

This negative lookahead will fail on input longer than 200 characters. See this demo at regex101.

Positive option, which might be slower on most input: ^(?=.{0,200}$)

bobble bubble
  • 16,888
  • 3
  • 27
  • 46