JavaScript中的正则表达式无法按预期工作

时间:2013-03-25 14:20:44

标签: javascript regex

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

  1. 它会允许所有特殊字符
  2. 必须包含至少1个字母字母数字
  3. 只有特殊字符才能起作用
  4. 我用过

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

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

    示例:

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

    2. a1!@#$*()_传递

    3. 请帮助纠正正则表达式。

3 个答案:

答案 0 :(得分:1)

tl; dnr回答:

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

说明:

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

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

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

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

    [!-~]+$

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

    .*[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

似乎工作!

答案 1 :(得分:0)

你的正则表达式需要一个字母字符后跟一个字母数字字符。显然,第一个例子没有那个条件,而第二个例子通过了。

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

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

它会在str中的任意位置搜索字母数字字符。

答案 2 :(得分:0)

  1. 它会允许所有特殊字符 =>不需要测试,任何字符串都符合此规则
  2. 必须包含至少1个字母或字母数字 => /[a-zA-Z0-9]/
  3. 只有特殊字符不起作用 =>第二个条件已经解决了这个问题。
  4. 你的正则表达式:

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

    [编辑]这实际上与@ acheong87 ...

    的答案相同