因此必须通过:
454555, 939999 , 019999 ,727663
用于输入6位数发票号码的用户。如果一个数字是5或7位数而不是6,它应该会失败。所以1234567, 123456
应该失败,因为一个数字超过6个数字。
到目前为止,我有:
[0-9]{6}(\s*,*,\s*[0-9]{6})*
只退回是它接受7位或更多位数字。无法确定此时是否可以同时执行这两项操作,测试由逗号和一个或多个空格分隔的6位数字,并且所有数字必须仅为6位数,如果不是则会失败。
任何帮助表示赞赏。正则表达不是我的强项。
感谢
诺曼
答案 0 :(得分:4)
您可以像下面的函数一样使用正则表达式来编写它。
const isPassword = (password: string) => /^\d{6}$/gm.test(password);
这是下面的示例测试文件。
test('should recognize a valid password', () => {
expect(isPassword('123456')).toBe(true);
expect(isPassword('000000')).toBe(true);
});
test('should recognize an invalid password', () => {
expect(isPassword('asdasda1234')).toBe(false);
expect(isPassword('1234567')).toBe(false);
expect(isPassword('a123456a')).toBe(false);
expect(isPassword('11.11.11')).toBe(false);
expect(isPassword('aaaaaa')).toBe(false);
expect(isPassword('eeeeee')).toBe(false);
expect(isPassword('......')).toBe(false);
expect(isPassword('werwerwerwr')).toBe(false);
});
答案 1 :(得分:1)
它接受超过六位数的数字,因为你没有锚定文本,并且由于一些奇怪的原因,你可以选择重复逗号。尝试这样的事情:
^[0-9]{6}(?:\s*,\s*[0-9]{6})*$
另请注意,[0-9]
相当于\d
,因此可以更简洁地重写为:
^\d{6}(?:\s*,\s*\d{6})*$
答案 2 :(得分:1)
您的正则表达式与行中的7
个数字不匹配,但它也不强制它与整个字符串匹配。它只需匹配字符串中的一些子字符串,因此它也会匹配以下各项:
"1234512345612345612345"
"NaNaNaN 123456, 123456 BOOO!"
"!@#$%^&*({123456})*&^%$#@!"
只需添加字符串的开头(^
)和字符串结尾($
)锚点,以强制整个字符串匹配并且它将正常工作:
^[0-9]{6}(\s*,*,\s*[0-9]{6})*$
另请注意,,*,
可以缩短为,+
,如果您只想连续使用一个逗号,只需使用,
,而不是,*
或{{1 }}
您也可以将,+
替换为[0-9]
:
\d
答案 3 :(得分:1)
为了验证完整字符串,您可以使用此正则表达式。
^(\s*\d{6}\s*)(,\s*\d{6}\s*)*,?\s*$
仅适用于六位数字,您必须输入至少一个6位数字。 如果你有一个带有空格的尾随逗号,它也可以工作。
答案 4 :(得分:0)
仅使用正则表达式:
var commaSeparatedSixDigits = /^(?:\d{6}\s*,\s*)*\d{6}$/;
if (myInput.test(commaSeparatedSixDigits)) console.log( "Is good!" );
这说:
^
- 从字符串的开头(?:…)*
- 找到以下零个或多个:
\d{6}
- 六位数字\s*
- 也许是一些空白,
- 一个文字逗号\s*
- 也许是一些空白\d{6}
- 后跟六位数字$
- 后面是字符串可替换地:
var commaSeparatedSixDigits = /^\s*\d{6}(?:\s*,\s*\d{6})*\s*$/;
我把它作为练习留给你来解读与此有什么不同。
使用JavaScript +正则表达式:
function isOnlyCommaSeparatedSixDigitNumbers( str ){
var parts = srt.split(/\s*,\s*/);
for (var i=parts.length;i--;){
// Ensure that each part is exactly six digit characters
if (! /^\d{6}$/.test(parts[i])) return false;
}
return true;
}
答案 5 :(得分:0)
没有真正需要正则表达式。将输入限制为仅6个字符,仅接受数字并确保输入有6位数字(此处未显示)。所以你需要:
HTML
<input type='text' name='invoice' size='10' maxlength='6' value='' onkeypress='evNumersOnly(event);'>
的JavaScript
<script>
function evNumbersOnly( evt ) {
//--- only accepts numbers
//--- this handles incompatabilities between browsers
var theEvent = evt || window.event;
//--- this handles incompatabilities between browsers
var key = theEvent.keyCode || theEvent.which;
//--- convert key number to a letter
key = String.fromCharCode( key );
var regex = /[0-9]/; // Allowable characters 0-9.+-,
if( !regex.test(key) ) {
theEvent.returnValue = false;
//--- this prevents the character from being displayed
if(theEvent.preventDefault) theEvent.preventDefault();
}
}
</script>
答案 6 :(得分:0)
我在这看到很多复杂功能。听起来像你想要的很简单:
/^(\d{6},)*\d{6}$/
然后我们考虑空白:
/^\s*(\d{6}\s*,\s*)*\d{6}\s*$/
但正如其他人所说,在没有使用正则表达式的情况下,这在JavaScript中非常简单:
function check(input) {
var parts = input.split(',');
for (var i = 0, n = parts.length; i < n; i++) {
if (isNaN(+parts[i].trim())) {
return false;
}
}
return true;
}
在Chrome JavaScript控制台中测试。