打字稿-在文本框中输入文本时,使用替代列表进行验证

时间:2019-03-01 03:34:55

标签: javascript regex typescript

我想在用户输入时检查有效的手机号码 它应以04开头,后跟数字或 应该以+61开头,后跟数字

但是验证应该在用户键入时进行,并且如果用户遵循正确的顺序,则不应抱怨。例如:用户只能输入0 ..并且它应该仍然匹配,但不应在接下来输入“ 4”以外的任何其他数字时输入。

我正在使用以下正则表达式,但问题在于它会验证“ 0”,“ 04”以及“ 4”

^(0?4?)|(+?6?1?)

regexr.com/49bj4

4 个答案:

答案 0 :(得分:1)

请参见https://regex101.com/r/seh5w4/4

^((04)|(0)|(\+61)|(\+6)|(\+))(?(2)(\d{0,6}))(?(3)((?(?=4)4\d{0,6})))(?(4)(\d{0,6}))(?(5)((?(?=1)1\d{0,6})))(?(6)((?(?=61)61\d{0,6})))$

^((04)|(0)|(\+61)|(\+6)|(\+))  does it start with one of these these

(?(2)(\d{0,6}))  if there is a group 2 (04) is it followed by 0-6 digits

(?(3)((?(?=4)4\d{0,6}))) if group 3 (0) is it followed by a 4, if so is that 4 followed by 0-6 digits

(?(4)(\d{0,6})) if group 4 (+61) is it followed by 0-6 digits

(?(5)((?(?=1)1\d{0,6}))) if group 5 (+6) is it followed by a 1, if so is that 1 followed by 0-6 digits

(?(6)((?(?=61)61\d{0,6}))) if group 6 (+), is it followed by 61, if so is that 61 followed by 0-6 digits

我使用了6位数字,无论04或+61之后允许的最大位数,您都应该更改它。

我做到了,所以如果您使用的位数超过最大位数,它将不匹配。

我相信它可以在您键入所需的每个字符时起作用。 (您并未指出在数字集之间允许有空格,但是可以对此进行修改以处理该问题。)

鉴于正则表达式的复杂性,我不确定我是否真的建议使用此方法...

答案 1 :(得分:0)

正则表达式的问题是FREETYPE_ROOT

  

使前面的量词变得懒惰,使其匹配尽可能少的字符。默认情况下,量词是贪婪的,并且将匹配尽可能多的字符。

尝试这个?

/^04\d+|\+61\d+/^(字符串)开头,后跟数字04,其他数字相同。

\d+

答案 2 :(得分:0)

您的用例应使用2个正则表达式。

一个用于在键入时进行验证,另一个用于在提交或集中输入时进行验证。

输入时:^((04?)|(\+((61?)?)?)|(?!.))

提交时:^(04|\+61)[0-9]+

答案 3 :(得分:0)

尝试一下:

var patt = /^((0(4\d*)?)|(\+(6(1\d*)?)?)?)*$/ ;

var patt = /^((0(4\d*)?)|(\+(6(1\d*)?)?)?)*$/ ;

console.log('0 ==>',patt.test('0') );
console.log('04 ==>',patt.test('04') );
console.log('4 ==>',patt.test('4') );

console.log('+6 ==>',patt.test('+6') );
console.log('067 ==>',patt.test('+67') );