Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Javascript > regular expressions and search() - vertical bar problem

Reply
Thread Tools

regular expressions and search() - vertical bar problem

 
 
Ward Cleaver
Guest
Posts: n/a
 
      09-28-2004
Hi. I have an assignment to do some validating of a form using
javascript and mostly the search() method. I'm having problems
getting a positive validation for phone numbers like "123-456-7890"
and "123.456.7890" but not like "123.456-7890". The regular
expression I'm using now is something like this:
ok = pn.search(/(^\d{3}-\d{3}-\d{4}$)|(^\d{3}.\d{3}.\d{4}$)/);
Which to me looks like it SHOULD do what I want it to and not come
back with an ok=0 for a phone number using both hyphens and periods.
Please help.
 
Reply With Quote
 
 
 
 
RobG
Guest
Posts: n/a
 
      09-29-2004
Ward Cleaver wrote:

> ok = pn.search(/(^\d{3}-\d{3}-\d{4}$)|(^\d{3}.\d{3}.\d{4}$)/);


I'm guessing...

(/(^\d{3}(-|.)\d{3}(-|.)\d{4}$)/)

should do the trick for all cases.

You could also use:

(/((\d{3}(-|.)){2}\d{4}$)/)

but that will produce +ve values if extra characters are
added to the front of the test string - only zero (0) will
be a correct result or any non-zero value a fail. For the
sake of saving a few characters, I don't think it's worth
it.

Cheers.
 
Reply With Quote
 
 
 
 
Michael Winter
Guest
Posts: n/a
 
      09-29-2004
On 28 Sep 2004 15:45:51 -0700, Ward Cleaver <(E-Mail Removed)> wrote:

> Hi. I have an assignment


If you mean an educational course assignment, you're probably required to
mention that you received help.

> to do some validating of a form using javascript and mostly the search()
> method.


String.prototype.search is generally unsuitable for validation. If you
want to assert that a string matches a pattern, use RegExp.prototype.test:

/<pattern>/.test(<string>)

which returns true for a match. The search method returns the position
where a match was found.

> I'm having problems getting a positive validation for phone numbers like
> "123-456-7890" and "123.456.7890" but not like "123.456-7890". The
> regular expression I'm using now is something like this:
> ok = pn.search(/(^\d{3}-\d{3}-\d{4}$)|(^\d{3}.\d{3}.\d{4}$)/);


An unescaped dot (period) matches *any* character (except line
terminators). A literal dot needs to written with a backslash prefix.

> Which to me looks like it SHOULD do what I want it to and not come back
> with an ok=0 for a phone number using both hyphens and periods.
> Please help.


Though I recommended the test method, I'd probably use
RegExp.prototype.exec so I could check that the separators match:

var r = /^\d{3}([.-])\d{3}([.-])\d{4}$/.exec(pn);

/* If the string didn't match, r will be null.
* If it did match, r will be an array with element
* 0 containing the match
* 1 containing the first remembered match (marked with
* parentheses)
* 2 containing the second remembered match
*/
if(r && (r[1] == r[2])) {
// Pattern matched and the separators are equal.
}

Good luck,
Mike

--
Michael Winter
Replace ".invalid" with ".uk" to reply by e-mail.
 
Reply With Quote
 
Dr John Stockton
Guest
Posts: n/a
 
      09-29-2004
JRS: In article <(E-Mail Removed) >,
dated Tue, 28 Sep 2004 15:45:51, seen in news:comp.lang.javascript, Ward
Cleaver <(E-Mail Removed)> posted :
> I have an assignment to do some validating of a form using
>javascript and mostly the search() method. I'm having problems
>getting a positive validation for phone numbers like "123-456-7890"
>and "123.456.7890" but not like "123.456-7890". The regular
>expression I'm using now is something like this:
>ok = pn.search(/(^\d{3}-\d{3}-\d{4}$)|(^\d{3}.\d{3}.\d{4}$)/);
>Which to me looks like it SHOULD do what I want it to and not come
>back with an ok=0 for a phone number using both hyphens and periods.



Dot matches any character; use \. . Testing only with more-or-less
valid data is a distressingly common mistake; a test with a non-allowed
first separator would have given a clue. Build up such expressions in
small stages, testing as you go.

Search returns a number; to get a Boolean for OK, use test.

OK = /^(\d\d\d)([-\.])(\d\d\d)\2(\d\d\d\d)$/.test(pn)

Be aware that by using that format only you exclude many of the
telephones in North America and elsewhere.

--
John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v4.00 IE 4
<URL:http://www.jibbering.com/faq/> JL/RC: FAQ of news:comp.lang.javascript
<URL:http://www.merlyn.demon.co.uk/js-index.htm> jscr maths, dates, sources.
<URL:http://www.merlyn.demon.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.
 
Reply With Quote
 
rh
Guest
Posts: n/a
 
      09-29-2004
"Michael Winter" wrote:
<...>
>
> Though I recommended the test method, I'd probably use
> RegExp.prototype.exec so I could check that the separators match:
>
> var r = /^\d{3}([.-])\d{3}([.-])\d{4}$/.exec(pn);
>
> /* If the string didn't match, r will be null.
> * If it did match, r will be an array with element
> * 0 containing the match
> * 1 containing the first remembered match (marked with
> * parentheses)
> * 2 containing the second remembered match
> */
> if(r && (r[1] == r[2])) {
> // Pattern matched and the separators are equal.
> }
>


Alternatively, including a backreference in the regular expression
would allow use of the preferred test method, e.g.:

if ( /^\d{3}([-.])\d{3}\1\d{4}$/.test(pn) ) {
// Pattern matched and the separators are equal.
}

../rh
 
Reply With Quote
 
Michael Winter
Guest
Posts: n/a
 
      09-29-2004
On 29 Sep 2004 09:20:10 -0700, rh <(E-Mail Removed)> wrote:

[snip]

> Alternatively, including a backreference in the regular expression would
> allow use of the preferred test method, e.g.:


I didn't know they existed as an ECMA-262 conformant pattern but I have
just found it (section 15.10.2.11). How well supported are they?

Thanks,
Mike

--
Michael Winter
Replace ".invalid" with ".uk" to reply by e-mail.
 
Reply With Quote
 
rh
Guest
Posts: n/a
 
      09-30-2004
"Michael Winter" <(E-Mail Removed)> wrote in message news:<opse3j52gcx13kvk@atlantis>...
> On 29 Sep 2004 09:20:10 -0700, rh <(E-Mail Removed)> wrote:
>
> [snip]
>
> > Alternatively, including a backreference in the regular expression would
> > allow use of the preferred test method, e.g.:

>
> I didn't know they existed as an ECMA-262 conformant pattern but I have
> just found it (section 15.10.2.11). How well supported are they?
>


RegExp backreferences were present in v1.2. I believe it's possible to
use said same with gay abandon .

../rh
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
disable title bar, status bar, and address bar of a window Matt HTML 9 08-23-2004 07:49 PM
javascript to disable the title bar, status bar, and address bar of a window Matt Javascript 9 08-23-2004 01:23 PM
Re: disable title bar, status bar, and address bar of a browser window John Hann ASP .Net 0 08-21-2004 05:07 AM
disable title bar, status bar, and address bar of a browser window Matt ASP .Net 0 08-21-2004 03:50 AM
Add custom regular expressions to the validation list of available expressions Jay Douglas ASP .Net 0 08-15-2003 10:19 PM



Advertisments