首页 文章

正则表达式模式匹配字符串中至少1个数字和1个字符

提问于
浏览
38

我有一个正则表达式

/ ^([a-zA-Z0-9])$ /

这只允许使用字母数字,但如果我只插入数字或只插入字符,那么它也接受它 . 我希望它工作,因为字段应该只接受字母数字值,但该值必须至少包含1个字符和1个数字 .

8 回答

  • 3

    为什么不首先应用整个测试,然后为字符和数字添加单独的测试?无论如何,如果你想在一个正则表达式中完成所有操作,请使用正向前瞻:

    /^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/
    
  • 0

    这个RE会做:

    /^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]*$/i
    

    RE的解释:

    • 匹配以下任一项:

    • 至少一个数字,然后一个字母或

    • 至少一个字母,然后一个数字加

    • 任何剩余的数字和字母

    • (?:...) 创建一个未引用的组

    • /i 是ignore-case标志,因此 a-z == a-zA-Z .

  • 13

    我可以看到其他响应者给了你一个完整的解决方案 . 正则表达式的问题在于它们难以维护/理解 .

    一个更简单的解决方案是保留现有的正则表达式,然后创建两个新的正则表达式来测试“至少一个字母”和“至少一个数字” .

    所以,测试一下: -

    /^([a-zA-Z0-9]+)$/
    

    然后这个: -

    /\d/
    

    然后这个: -

    /[A-Z]/i
    

    如果你的字符串通过了所有三个正则表达式,你就得到了你需要的答案 .

  • 76

    虽然接受的答案是正确的,但我发现这个正则表达式更容易阅读:

    REGEX = "([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*"
    
  • 5

    也许有点晚了,但这是我的RE:

    /^(\w*(\d+[a-zA-Z]|[a-zA-Z]+\d)\w*)+$/

    说明:

    \w* - > 0或更多字母数字,在开头

    \d+[a-zA-Z]|[a-zA-Z]+\d - >数字字母或字母数字

    \w* - > 0或更多字母数字,再次

    我希望这是可以理解的

  • 3

    此解决方案接受至少1个数字和至少1个字符:

    [^\w\d]*(([0-9]+.*[A-Za-z]+.*)|[A-Za-z]+.*([0-9]+.*))
    
  • 2

    还有一个负面检查的想法 .

    /^(?!\d*$|[a-z]*$)[a-z\d]+$/i
    
    • ^(?! at start look ahead if string does not

    • \d*$ 仅包含数字 |

    • [a-z]*$ 仅包含字母

    • [a-z\d]+$ 匹配一个或多个字母或数字,直到 $ 结束 .

    Have a look at this regex101 demo

    i flag turns on caseless matchinga-z 匹配 a-zA-Z

  • 16

    接受的答案不起作用,因为不允许输入特殊字符 .

    它对我来说非常完美 .

    ^(?=.*[0-9])(?=.*[a-zA-Z])(?=\S+$).{6,20}$

    • 一位数 must

    • 一个字符 must (下或上)

    • 其他所有东西都是可选的

    谢谢 .

相关问题