Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript RegEx partial match

I have a regular expression pattern, which validates for a three digit number

/^\d{3}$/.test("123")   // true
/^\d{3}$/.test("123.")  // false

I want to use this regex as an input restriction on a textbox.

Basically, if the new value matches, i allow the character to by typed, otherwise i prevent it.

The problem is that no value will ever match, becase "1" is not a full match, and will not allow me to type it.

Is it any way of testing a partial match for a regEx in javascript?

/^\d{3}$/.test("123")   // true
/^\d{3}$/.test("12")    // "partial match"
/^\d{3}$/.test("a12")   // false

EDIT

\d{3} was just an example. I need to use an email regex or a phone regex as input restriction.

"email"        // true
"email@"       // true
"email@@"      // false
"@yahoo.com"   // false

EDIT 2

I have a textBox plugin with input restriction based on a regular expression.

The regular expression can be anything, a hex color Regex, for example: (#){1}([a-fA-F0-9]){6}

I need to prevent user to insert characters which doesn't match the regex.

For example, if the textbox is empty, the first allowed character would be "#".

But if i test "#" character against the regex, it will return "false", because "#" by itself is not valid.

/^(#){1}([a-fA-F0-9]){6}$/.test("#") // false

But at the same time, "#" is partial valid because it respects the regex format (and i should allow user to type it)

What i need to know is if i can verify if a string is a partial match of a regex, so i can allow the user to type the character.

/^(#){1}([a-fA-F0-9]){6}$/.test("#")        // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#0")       // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#00")      // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#000")     // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#0000")    // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#00000")   // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#000000")  // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#000000D") // is not a match, prevent typing
like image 552
Catalin Avatar asked Jan 30 '12 08:01

Catalin


People also ask

What makes the match () method so useful in regex?

So if regex is all about finding patterns in strings, you might be asking yourself what makes the .match () method so useful? Unlike the .test () method which just returns true or false, .match () will actually return the match against the string you're testing.

How do you use regular expressions in JavaScript?

To use regex in JavaScript, you simply need to define the regex pattern you wish to match, then pass it to one of the built-in regex methods to see if the search pattern is matched by all or part of the string. What do Regular Expressions Look Like? Regular expressions are notoriously complex.

What is the difference between match () and replace () in JavaScript?

The best part is that .replace () returns a new string, and the original remains the same. Similar to the .match () method, .replace () will only replace the first matched pattern it finds unless you use regex with the g flag:

How do you remember parenthesized substring matches in JavaScript?

Using parenthesized substring matches. Including parentheses in a regular expression pattern causes the corresponding submatch to be remembered. For example, /a(b)c/ matches the characters 'abc' and remembers 'b'. To recall these parenthesized substring matches, use the Array elements [1], ..., [n].


2 Answers

You could partially validate the email address by using ()? for more letters and/or characters. Every ()? going deeper in the validation tree.

The following regular expression pattern validates email address letter by letter.

^[a-zA-Z]+(@{1}[a-zA-Z]*(\.{1}[a-zA-Z]*)?)?$

It does not take into account every possibility out there, but for basic ones like [email protected] it works just fine and there's room to improve it further.

like image 182
Ilu Avatar answered Oct 05 '22 02:10

Ilu


You would be better off by using a library like maskedinput.js. You can then setup your text input like follows:

jQuery(function($){
    $("#your_input").mask("999");
});

UPDATE

you can use a validator for forms and preset specific types of fields to validate

like image 20
epoch Avatar answered Oct 05 '22 00:10

epoch