Why Doesn't this regex return a positive result?

Posted on 2014-03-07
Last Modified: 2014-03-07
I'm not familiar with regex and a temp programmer used this code.
        $pattern = '^[AD]([HF][12]|[Z][1])([0][1234569]|[1][0-9]|[2][123]|[3][34]|[4][0]|[5][1346])([0][12345679]|[1][0])([0][12345]|[1][03]|[2][03679]|[3][2389]|[4][01]|[5][1]|[9][5])([0][0123458]|[1][8]|[2][68]|[3][8]|[4][8]|[H][B])*^';
        //check if the product code matches a valid code pattern
        if(!preg_match($pattern, $pc)){
            $error = 'Please enter a valid product code';

Open in new window

$pc is equal to "AF141020100"

I'm wondering if someone could explain how this code does not match the pattern specified.
Question by:dmleves49
  • 4
  • 3
LVL 34

Expert Comment

by:Dan Craciun
ID: 39913593
Because it expects to be AF140, not AF141

LVL 34

Accepted Solution

Dan Craciun earned 500 total points
ID: 39913604
Try this pattern to match:

Open in new window

LVL 108

Expert Comment

by:Ray Paseur
ID: 39913722

Try writing down the rules for the product code.  I'll bet the regular expression could be a LOT simpler.

Author Comment

ID: 39913751
Thanks Dan. I was able to aquaint myself with regex enough to figure it out. The first two characters could only equal 33 or 34 if they started with a 3 or 40 if they started with a 4, etc.
6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

LVL 34

Expert Comment

by:Dan Craciun
ID: 39913758
OK. So what was deficient in my answer?
See here for the grading guide:

In case of any other grade than A you are required to explain what was deficient about the solution.

Thank you.

Author Comment

ID: 39913944
I'm new here so I don't want to cause any problems as I appreciated everyone's help. I do however feel that getting the answer correct isn't actually what I requested.

I would have expected something like what I originally discovered. For Example:

The reason that your product code does not match the regex is because each set of parentheses is testing 2 digits. The first set of digits that do not match in your regex are "41" because [4][0] will only match "40". If you used [4][01] then it would match 40 or 41.

I'll upgrade your mark though. I just thought it required a bit of explanation since I said I wasn't familiar with regex.

Author Closing Comment

ID: 39913950
Sorry Dan , I only saw your code comment, not your explanation. My bad.
LVL 34

Expert Comment

by:Dan Craciun
ID: 39914167
No worries, mate. Thanks for the points and welcome to EE.


Featured Post

Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Wordpress type image upload 10 32
Creating a slider 12 34
Re-position sub-options beneath the TAB 7 43
PHP JSON Clean up 5 10
How to remove superseded packages in windows w60 or w61 installation media (.wim) or online system to prevent unnecessary space. w60 means Windows Vista or Windows Server 2008. w61 means Windows 7 or Windows Server 2008 R2. There are various …
If you haven’t already, I encourage you to read the first article ( in my series to gain a basic foundation of R and R Studio.  You will also find the …
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.
The viewer will learn how to dynamically set the form action using jQuery.

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now