首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex匹配可选字符仅在非数字的情况下。

Regex匹配可选字符仅在非数字的情况下。
EN

Stack Overflow用户
提问于 2016-10-02 15:45:25
回答 3查看 452关注 0票数 1

我正在尝试匹配字符串a,其中第一个字符是1-9,接下来的三个字符是0-9。如果有任何附加字符,则第一个附加字符不能是数字。完整字符串不能包含@字符。

应该传递的字符串

  • 1234
  • 1234 5678910
  • 1234 12345678
  • 1234堆栈溢出
  • 1234堆栈溢出

不应通过

  • 0123
  • 123
  • 12345
  • 1235@6789
  • ABCDEF

到目前为止,我想出了^[1-9][0-9]{3}(\D)?。但这也通过了12345

如有任何帮助或指导,将不胜感激:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-02 15:49:51

试试这个正则表达式:

代码语言:javascript
复制
^[1-9][0-9]{3}([^@0-9][^@]*)?$

如果我正确地阅读了你的要求,匹配的字符串应该从1-9开始,后面跟着任何数字的3位数字,如果不是数字或符号的话。regex中的[^@0-9]是一个负字符类,它匹配任何非数字字符,而不是at符号。

演示这里:

Regex101

票数 2
EN

Stack Overflow用户

发布于 2016-10-02 16:33:13

使用此^[1-9][0-9]{3}(?:$|[^@\d][^@]*)

代码语言:javascript
复制
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][^@]*)/));

票数 1
EN

Stack Overflow用户

发布于 2016-10-02 15:49:30

您可以使用它获得正确的匹配:

代码语言:javascript
复制
/^[1-9]\d{3}[a-z]*$/i
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39818715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档