我想在用户输入时检查有效的手机号码 它应以04开头,后跟数字或 应该以+61开头,后跟数字
但是验证应该在用户键入时进行,并且如果用户遵循正确的顺序,则不应抱怨。例如:用户只能输入0 ..并且它应该仍然匹配,但不应在接下来输入“ 4”以外的任何其他数字时输入。
我正在使用以下正则表达式,但问题在于它会验证“ 0”,“ 04”以及“ 4”
^(0?4?)|(+?6?1?)
regexr.com/49bj4
答案 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') );