当前位置: 首页 > 知识库问答 >
问题:

为什么这个正则表达式允许插入符号?

慕学海
2023-03-14

null

^(?=.*[0-9])(?=.*[A-z])[0-9A-z-]{17}$

应匹配“17个字母数字字符,连字符也可以,必须包括至少一个字母和至少一个数字”

它将正确匹配:

ABCDF31U100027743

并正确拒绝匹配:

AB$DF31U100027743

null

null

AB^DF31U100027743

共有1个答案

阮雅达
2023-03-14

因为您的字符类[A-z]与此符号匹配。

[A-z]匹配[,\,],^,_,`和英文字母。

其实是一个常见的错误。您应该使用[a-zA-Z]仅允许使用英文字母。

下面是Expresso的一个可视化显示,显示了[A-z]范围实际覆盖的内容:

因此,这个正则表达式(带有i选项)不会捕获您的字符串。

^(?=.*[0-9])(?=.*[a-z])[0-9a-z-]{17}$

在我看来,使用ignorecase选项来避免这样的问题并缩短正则表达式总是比较安全的。

 类似资料:
  • 我的表单中有2个输入字段(电话号码),我应该验证这些输入。数字0-9和()-只允许,位数应该在5和11之间{5,11}。我试着用方法替换。你能解释一下,它是如何工作的吗?

  • 问题内容: 允许数字和点的正则表达式是什么?关于\D这只允许数字,但不允许一个点,我需要它允许数字和一个点,这是一个浮点值,当我在中执行函数时需要有效,但我需要的只是正则表达式那只允许我需要它允许的。 这将是JavaScriptreplace函数的本机语言,用于删除非数字和其他符号(点除外)。 问题答案: 如果您想允许1和1.2: 如果您希望允许,和: 如果只允许1.2(仅浮动): \d允许位数(

  • 问题内容: 试图了解正则表达式,我在重复的部分:。 我有以下代码: 如您所见,两个字符串都不匹配该模式。为什么会这样呢? 问题答案: 您不应该在逗号后加空格,这是多余的。

  • 这个正则表达式什么意思?这里$1代表什么?

  • 正则获取指定字符到下一个大写字符之间的内容