1

我将根据以下条件进行验证:

  1. 它将允许所有特殊字符
  2. 它必须包含至少 1 个字母字母数字
  3. 只有特殊字符不起作用

我用了

/^\d*[a-zA-Z][a-zA-Z0-9]+/

它适用于所有场景,但在输入特殊字符之前确实需要 2 个字符或数字或两个字符的组合。

例子:

  1. a!!@#$*()_失败但应该通过

  2. a1!@#$*()_通行证

请帮助更正正则表达式。

4

3 回答 3

1

tl;dnr 答案:

/^(?=[!-~]+$)(?=.*[a-zA-Z0-9])/

解释:

在正则表达式中表达“AND”条件的常用方法如下:

/
    ^
    (?= pattern 1)
    (?= pattern 2)
    (?= pattern 3)
    etc
/

^基本上,只有当其余部分与所有给定模式匹配时,我们才接受输入 ( ) 的开始。否则,整个表达式将失败。

在您的示例中,模式 1 是匹配所有内容,包括“特殊字符”。根据您的评论,您正在寻找可打印的 ASCII 范围。一个 ASCII 字符是[!-~],因为我们不想要任何其他东西(比如“国际字符”)并且不允许空字符串,最终模式是:

    [!-~]+$

第二种模式是“至少一个字母数字”,可以改写为“任何数量的其他任何东西,然后是一个数字或字母”,即

    .*[A-Za-z0-9]

把它们放在一起:

    /^(?=[!-~]+$)(?=.*[a-zA-Z0-9])/

一些测试:

    re = /^(?=[!-~]+$)(?=.*[a-zA-Z0-9])/

    console.log(re.test("hi"))            // true
    console.log(re.test("a!!@#$*()_"))    // true

    console.log(re.test("~!!@#$*()_"))    // false
    console.log(re.test("π+1"))           // false
    console.log(re.test(""))              // false

似乎工作!

于 2013-03-25T15:01:02.700 回答
0

您的正则表达式需要一个字母字符后跟一个字母数字字符。显然,第一个示例不符合该条件,而第二个示例则通过了。

你的条件也有很大的重叠。说它必须包含“至少一个字母或字母数字字符”与简单地说它必须包含“至少一个字母数字字符”是一样的。这个条件也排除了说字符串不能都是特殊字符的需要;虽然在那里,你可能只是在澄清。您需要的正则表达式非常简单:

/[a-zA-Z0-9]/.test(str)

它在任何地方搜索str字母数字字符。

于 2013-03-25T14:27:29.033 回答
0
  1. 它将允许所有特殊字符 => 不需要测试,任何字符串都匹配此规则
  2. 它必须包含至少 1 个字母或字母数字 =>/[a-zA-Z0-9]/
  3. 只有特殊字符不起作用=>第二个条件已经解决了这个问题。

你的正则表达式:

/[a-zA-Z0-9]/.test(string)

[编辑] 这实际上与@acheong87 的答案相同......

于 2013-03-25T14:40:19.623 回答