Reputation: 6152
I'm trying to match a SEDOL (exactly 7 chars: 6 alpha-numeric chars followed by 1 numeric char)
My regex
([A-Z0-9]{6})[0-9]{1}
matches correctly but strings greater than 7 chars that begin with a valid match also match (if you see what I mean :)). For example:
B3KMJP4
matches correctly but so does:
B3KMJP4x
which shouldn't match.
Can anyone show me how to avoid this?
Upvotes: 5
Views: 10276
Reputation: 50523
^([A-Z\d]{6})\d$
Upvotes: 3
Reputation: 129519
Dollar sign at the end of the regex (called an anchor) signifies end of string:
^([A-Z0-9]{6})\d$
I also added "^" at the start which signifies start of string and prevents matching xB3KMJP4 I also simplified the original regex.
By the way, as per Wikipedia, for the first character, vowels are not used. I'm not quite sure if that's a rule or a convention.
Upvotes: 8
Reputation: 455360
You need to use both start
and end
anchors
like this:
^([A-Z 0-9]{6})[0-9]{1}$
This will match a string which has 6 alphanumeric+space char followed by one digit. It does not match if such a string is found as a suffix or prefix of a bigger string.
Also you you can get rid of {1}
because [0-9]
matches a single digit by itself.
Also \d
represents a single digit. So you can shorten your regex as follows:
^([A-Z \d]{6})\d$
Upvotes: 5
Reputation: 66152
You're forgetting that regex matches anywhere in the string. To fix it, try this.
^([A-Z 0-9]{6})[0-9]{1}$
The ^ means to match the beginning of the string, and the $ means to match the end of the string.
Upvotes: 3