Javascript Typescript-在文本框中输入文本时,使用替换列表进行验证
我想在用户键入手机号码时检查该号码是否有效 它应该以04开头,后跟数字或 应以+61开头,后跟数字 但是验证应该在用户输入时进行,如果用户遵循正确的顺序,就不应该抱怨。用户只能键入0。。并且它应该仍然匹配,但在下一步输入除“4”之外的任何其他数字时,它就不应该匹配 我正在使用以下正则表达式,但问题是它将验证“0”、“04”以及“4” ^(0?4?)(+?6?1?)Javascript Typescript-在文本框中输入文本时,使用替换列表进行验证,javascript,regex,typescript,Javascript,Regex,Typescript,我想在用户键入手机号码时检查该号码是否有效 它应该以04开头,后跟数字或 应以+61开头,后跟数字 但是验证应该在用户输入时进行,如果用户遵循正确的顺序,就不应该抱怨。用户只能键入0。。并且它应该仍然匹配,但在下一步输入除“4”之外的任何其他数字时,它就不应该匹配 我正在使用以下正则表达式,但问题是它将验证“0”、“04”以及“4” ^(0?4?)(+?6?1?) regexr.com/49bj4您的regex问题在于? 使前面的量词变懒,使其匹配尽可能少的字符。默认情况下,量词是贪婪的,将匹配
regexr.com/49bj4您的regex问题在于
?
使前面的量词变懒,使其匹配尽可能少的字符。默认情况下,量词是贪婪的,将匹配尽可能多的字符
试试这个/^04\d+\+61\d+/
:
^
以04
(字符串)开头,后跟数字\d+
,另一个数字也是如此。
const a=/^04\d+\+61\d+/g.test(“+61938272”)
常量b=/^04\d+\+61\d+/g.test(“+71938272”)
常数c=/^04\d+\+61\d+/g.test('04938272'))
常数d=/^04\d+\+61\d+/g.test(“+41938272”)
常数e=/^04\d+\+61\d+/g.test('051938272')
常数f=/^04\d+\+61\d+/g.test('451938272'))
log({a,b,c,d,e,f})代码>您应该为您的用例使用2个正则表达式
一个用于在键入时进行验证,另一个用于在提交或集中输入时进行验证
键入时:^((04?)(\+((61?))(?!)
提交时:参见
我使用了6位数字,您应该更改为04或+61之后允许的最大位数
我这样做是为了,如果您使用的位数超过了最大位数,它将不匹配
我相信当你输入你想要的每个角色时,它会起作用。(您没有表示允许在数字集之间使用空格,但这可能会被修改以处理此问题。)
鉴于正则表达式的复杂性,我不确定我是否真的建议使用这种方法 试试这个:
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')代码>只有+6会发生什么?它也应该有效。switch(number.length){case 0:{return true;}case 1:{return number.startsWith(“0”)| | number.startsWith(“+”)}case 2:{return number.startsWith(“04”)| | number.startsWith(“+6”)}案例3:{return number.startsWith(“04”)| | number.startsWith(“+61”)}案例4:默认值:{return number.startsWith(“04”)| | number.startsWith(“+614”)}}键入时一个表达式不起作用。在这种情况下,所有长度至少需要4的表达式。
^((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
var patt = /^((0(4\d*)?)|(\+(6(1\d*)?)?)?)*$/ ;