Re: Regex - Ensure 0,1 occurrences from a list of possibilities

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance




You are right, 64. With that number your way is probably at least
100 times faster.

On Sun, 29 Mar 2009 18:30:27 -0700, "Mark Tolonen"
<M8R-yfto6h@xxxxxxxxxxxxxx> wrote:

There are only 64 permutations. Not a pretty regex though:

"D-(1234|1243|1324|1342|1423|1432|2134|2143|2314|2341|2413|2431|
3124|3142|3214|3241|3412|3421|4123|4132|4213|4231|4312|4321|123|
124|132|134|142|143|213|214|231|234|241|243|312|314|321|324|341|342|
412|413|421|423|431|432|12|13|14|21|23|24|31|32|34|41|42|43|1|2|3|4)$"

-Mark

<nospam@invegat> wrote in message
news:vb20t4pe3tgjj7gm8igql0dcl9ec36e52p@xxxxxxxxxx
By my calculation there are 504 possibilities, I wouldn't call that
"only a few". If I were doing it these way I would generate the
matching strings with a 1 time use program.

On Sun, 29 Mar 2009 23:33:45 +0000 (UTC), Jesse Houwing
<jesse.houwing@xxxxxxxxxxxxxxxx> wrote:

Hello Byron,

I'm looking for an expression that checks that within a string only
certain characters appear, and that they appear at most 1 time. For
example, a string can have up to 4 unique digits between 1 and 4.

The following strings should pass:
D-1
D-14
D-1234
D-41
The following should fail:
D- (no digit)
D-0 (out of range)
D-5 (out of range)
D-11 (repeated digit)
D-1 2 (embedded space)
D-12345 (out of range and too long)
The expression "D-[1234]{1,4}" comes close, but it matches even when a
digit is repeated within the string.

Any help would be greatly appreciated.

As there's only a few possibilities, you could write them out like this:

(1234|1324|1342|1423|1432|....4321)

And do the same with the other options.

A better wat woukd be to check the general format with a regex, and then
later (if you're using asp.net validators) check the other requirement.

There are other possibilities (as invegat pointed out), but those aren't
supported by clientside Javascript , which would require a serverside
check
anyway.
.



Relevant Pages