我正在尝试匹配字符串a,其中第一个字符是1-9,接下来的三个字符是0-9。 如果有任何其他字符,则第一个附加字符不能是数字。完整字符串不能包含@字符。
应传递的字符串
不应该通过
到目前为止,我想出了^[1-9][0-9]{3}(\D)?
。但这也传递了12345
。
任何帮助或指导都将受到高度赞赏:)
答案 0 :(得分:2)
试试这个正则表达式:
^[1-9][0-9]{3}([^@0-9][^@]*)?$
如果我正确阅读了您的要求,匹配字符串应以1-9开头,后跟任意数字的3位数字,后跟任何内容,前提是它不是数字或符号。正则表达式中的[^@0-9]
是一个负字符类,匹配任何非数字字符而不是at符号。
在这里演示:
答案 1 :(得分:1)
使用此^[1-9][0-9]{3}(?:$|[^@\d][^@]*)
console.log('1234'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('1234 5678910'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('1234AB 12345678'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('1234stackoverflow'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('1234 stackoverflow'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('0123'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('123'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('12345'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('1235@6789'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('ABCDEF'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));

答案 2 :(得分:0)
您可以使用它来获得正确的匹配:
/^[1-9]\d{3}[a-z]*$/i