Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Typescript-在文本框中输入文本时,使用替换列表进行验证_Javascript_Regex_Typescript - Fatal编程技术网

Javascript Typescript-在文本框中输入文本时,使用替换列表进行验证

Javascript Typescript-在文本框中输入文本时,使用替换列表进行验证,javascript,regex,typescript,Javascript,Regex,Typescript,我想在用户键入手机号码时检查该号码是否有效 它应该以04开头,后跟数字或 应以+61开头,后跟数字 但是验证应该在用户输入时进行,如果用户遵循正确的顺序,就不应该抱怨。用户只能键入0。。并且它应该仍然匹配,但在下一步输入除“4”之外的任何其他数字时,它就不应该匹配 我正在使用以下正则表达式,但问题是它将验证“0”、“04”以及“4” ^(0?4?)(+?6?1?) regexr.com/49bj4您的regex问题在于? 使前面的量词变懒,使其匹配尽可能少的字符。默认情况下,量词是贪婪的,将匹配

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

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

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

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


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*)?)?)?)*$/ ;