• MTK@lemmy.world
    link
    fedilink
    arrow-up
    8
    ·
    19 hours ago

    Downvoted so that everyone can know I’m cool since I understand regex better than the idiot who made that meme.

  • exu@feditown.com
    link
    fedilink
    English
    arrow-up
    21
    ·
    1 day ago

    I usually do

    # What we are doing (high level)
    # Why we need regex
    # Regex step by step
    # Examples of matches
    regex
    

    And I still rewrite it the next time

  • NegativeLookBehind@lemmy.world
    link
    fedilink
    English
    arrow-up
    81
    ·
    edit-2
    1 day ago

    I found your email address:

    (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
    
    • exu@feditown.com
      link
      fedilink
      English
      arrow-up
      15
      ·
      1 day ago

      I was about to ruin your day by finding a valid email address that would be rejected by your regex, but it doesn’t even parse correctly on regex101.com

      The only valid regex for email is .+@.+ btw

        • exu@feditown.com
          link
          fedilink
          English
          arrow-up
          3
          ·
          21 hours ago

          That’s not something you can determine using a regex.

          “user@com” for example could be a perfectly working email.

          The right way is to send a verification email in every case.

      • NegativeLookBehind@lemmy.world
        link
        fedilink
        English
        arrow-up
        10
        ·
        edit-2
        1 day ago

        It’s the RFC standard regex for email, so it’s definitely valid, btw. My copy/paste just seems to add a bunch of backslashes for some reason

        • exu@feditown.com
          link
          fedilink
          English
          arrow-up
          3
          ·
          20 hours ago

          Where did you get that “RFC standard” regex? It doesn’t allow domain names with one component RFC5321

          Neither does it allow spaces in quoted string, as per RFC5322

          This, 👋@✉️.gg, is already a working email address in most clients and if RFC6532 ever gets accepted, it would be officially recognized as such.

          My point isn’t to make your regex bad, just that it doesn’t validate or invalidate an email properly. Nothing stops me from giving you and invalid but syntactically correct email after all.
          You have to send an email anyways to verify, so the most you can check is the presence of one @ symbol.

        • frezik
          link
          fedilink
          arrow-up
          5
          ·
          23 hours ago

          The argument here is that checking complex validation is a fool’s errand. Yes, you can write a fully validating regex for RFC email. In fact, it should be possible to write a regex shorter than the one that gets passed around since the 90s, because regular expression engines support recursive patterns now. (Part of the reason that old regex is so complicated is because email allows nested comments (which is insane (how insane? (Lisp levels insane)))).

          However, it doesn’t get you much of anywhere. What you really want to know is if it’s a valid email or not, and the only way to do that is to send an email to that address with a confirmation. The only point of the regex is to throw away obviously bad addresses. For that, checking that there’s an @ symbol and something for the user and domain portions is sufficient. I’d add needing a dot in the domain portion, but it’s not that important.

          Classically, it was argued that emails don’t even need a domain portion when things are done for internal systems, or that internal domains don’t need a tld. In my personal experience, this is rarely done anymore and can be safely ignored. Maybe some very, very old legacy systems, and if you’re working on one of those, then sure. For everyone else, don’t worry about it. You’re probably working on publicly accessible systems, and even if you’re not, most users are going to prefer using their fully spec’d out email address, anyway.

    • palordrolap@fedia.io
      link
      fedilink
      arrow-up
      9
      ·
      1 day ago

      That \\. part doesn’t look right, but what do I know. Apparently control codes are valid elsewhere, so a literal backslash followed by any character, even a space or a newline, might actually be valid there.

      “Yeah, my e-mail address is abc, carriage return, three backspaces and a terminal bell at example dot com. … What do you mean your mail program doesn’t support it?”

  • Kng@feddit.rocks
    link
    fedilink
    English
    arrow-up
    28
    arrow-down
    2
    ·
    2 days ago

    I have found chatgpt to be very good at writing regex. I also don’t know how to write regex.

    • Mirodir@discuss.tchncs.de
      link
      fedilink
      arrow-up
      16
      ·
      1 day ago

      In my experience, it is good at simple to medium complexity regex. For the harder ones it starts being quite useless though, at best providing a decent starting point to begin debugging from.

  • frezik
    link
    fedilink
    arrow-up
    30
    ·
    2 days ago

    It helps if you break it apart into its component parts. Which is like anything else, really, but we’ve all accepted that regexes are supposed to run together in an unreadable mess. No reason it has to be that way.

  • Skyrmir@lemmy.world
    link
    fedilink
    English
    arrow-up
    15
    arrow-down
    2
    ·
    2 days ago

    Never debug regex, just generate a new one. It’s not worth the hassle to figure out not only what it does, but what it was meant to do.

    Better yet, just write it out in code, and never use regex. Tis a stupid thing that never should have been made.

    • Hoimo@ani.social
      link
      fedilink
      arrow-up
      2
      ·
      18 hours ago

      I love regex and I use it a lot, but I very rarely use it in any kind of permanent solution. When I do, I make sure to keep it as minimal as possible, supplementing with higher level programming where possible. Backreferences and assertions are a cardinal sin and should never be used.

  • verstra@programming.dev
    link
    fedilink
    arrow-up
    8
    ·
    edit-2
    1 day ago

    If I have a complex regular expression to code into my app, I write it in pomsky, then copy paste the compiled regex to my source file, but also keep the pomsky source nearby. Much more maintainable.

  • kamen@lemmy.world
    link
    fedilink
    English
    arrow-up
    4
    ·
    1 day ago

    There are no bugs, it’s just not doing what you expect it to be doing…

    … which, now that I think of it, can be said about all software in general.