Let's take it one step further and make the Map a 1st-class object. After all, shouldn't all knowledge of how to recognize a driver's license be localized to a single class? Then the external interface can be a simple as isValidLicense( state, licenseString );
Max Cooper wrote: >I agree that reflection is not a good solution here, but does have useful >application in general (but it isn't needed here, so don't use it). Use a >singleton or a statically-initialized Map to look up the patterns based on >the state. Save yourself some time by putting Patterns in the map, >identified by the state represented as a String. > >patternMap.add("AK", Pattern.compile("^[0-9]{1,7}$")); > >Put the map in its own class (perhaps a singleton), so you would get >patterns from it with a call like one of these: > >Pattern pattern = LicensePatterns.getInstance().getPattern(licenseState); > >-or- > >Pattern pattern = LicensePatterns.getPattern(licenseState); > >Putting the patterns is a Properties file seems like a good idea, too. How >often do the patterns change? Perhaps you could add a refresh() method to >the singleton class to reload the patterns from the properties file if you >anticipate that they will change while the app is supposed to be running. >This is usually the case, but it is often overlooked when setting such >"constants". > >-Max > >----- Original Message ----- >From: "Jerry Jalenak" <[EMAIL PROTECTED]> >To: <[EMAIL PROTECTED]> >Sent: Monday, September 30, 2002 7:49 AM >Subject: [OT - Java] How can I do this in Java? > > > > >>OK - off topic, but Sun's java forum sucks, and there are an incredible >>number of Java guru's on this list, so I thought I'd throw this out here. >>(That and I am using this in a custom validation routine :-)) Any help >>would be GREATLY appreciated! >> >>Here's the scenario - I've got a series of static constants that represent >>Java regular expressions. These RE's are used to validate driver license >>formats for the 50 states + DC. The strings look like this: >> >>public static final String AK = "^[0-9]{1,7}$"; >>public static final String AL = "^[0-9]{7}$"; >>public static final String AR = "^[0-9]{8,9}$"; >>public static final String AZ = >>"^[0-9ABDY][0-9]{8}$|^[A-Z][0-9]{3,6}$|^[A-Z]{2}[0-9]{3,5}$"; >>public static final String CA = "^[A-Z][0-9]{4,7}$"; >>public static final String CO = >>"^[A-Z][0-9]{1,6}$|^[A-Z]{2}[0-9]{1,6}$|^[0-9]{9}$"; >>etc. etc. etc. >> >>On my form I have a drop-down box of states, and a field for the license >>number. In my custom validator routine, I pick up the value of the state, >>and build a string to represent the constant - i.e. >> >>private static boolean validateDriversLicenseNumber(String >>licenseState, String licenseNumber) >>{ >>String licenseConstant = "Constants." + licenseState; >> >>I then want to use "licenseConstant" in a Pattern / Match: >> >>Pattern p = Pattern.compile(licenseConstant, >>Pattern.CASE_INSENSITIVE); >>Match m = p.matcher(licenseNumber); >>return (m.find()); >>} >> >>Obviously the line "String licenseConstant = "Constants." + licenseState;" >>does not give me the value of Constant.<state name>; the question I have >> >> >is, > > >>is there a method (or something) that will allow me to build such a >> >> >string, > > >>and return the value (i.e. the regular expression)? Or is there a better >>way of doing this? >> >>TIA! >> >>Jerry Jalenak >>Web Publishing >>LabOne, Inc. >>10101 Renner Blvd. >>Lenexa, KS 66219 >>(913) 577-1496 >>[EMAIL PROTECTED] >> >> >>This transmission (and any information attached to it) may be confidential >> >> >and is intended solely for the use of the individual or entity to which it >is addressed. If you are not the intended recipient or the person >responsible for delivering the transmission to the intended recipient, be >advised that you have received this transmission in error and that any use, >dissemination, forwarding, printing, or copying of this information is >strictly prohibited. If you have received this transmission in error, please >immediately notify LabOne at (800)388-4675. > > >> >>-- >>To unsubscribe, e-mail: >> >> ><mailto:[EMAIL PROTECTED]> > > >>For additional commands, e-mail: >> >> ><mailto:[EMAIL PROTECTED]> > > >> >> > > > >-- >To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> >For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> > > > > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>