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

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


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 aa@bb.dd it works just fine and there's room to improve it further.


您可以在表达式中指定一个范围,以便它匹配一到三位数字之间的任何内容,如下所示:

/^d{1,3}$/.test("1")  // true
/^d{1,3}$/.test("12")  // true
/^d{1,3}$/.test("123a")  // false
链接地址: http://www.djcxy.com/p/77010.html

上一篇: 正则表达式如何匹配没有字符的单词

下一篇: Javascript RegEx部分匹配