验证输入是否仅包含特殊字符,而不包含任何数字

时间:2016-02-19 04:14:46

标签: javascript regex

问题:我正在尝试验证用户何时只输入特殊字符而不输入任何数字。

我正在使用这个表达式

/^\+?[0-9 \.-]+$/

在验证传真时仅接受“+”号,数字,点,超大和空格。这工作正常。

但是使用该表达式,用户可以在不输入任何数字的情况下输入--------------并被接受,因为它包含hypen。

问题:有没有办法检查输入是否包含数字?不只是所有特殊字符?

更新
这是有效接受输入的示例。

+1-2 12-98765.43>要求是它应该只接受'+'符号,hypen,数字,空格和点。

3 个答案:

答案 0 :(得分:4)

可能最简单的选择是对每个条件进行额外的正则表达式检查。例如。对数字/[0-9]/的存在进行正则表达式检查,并检查是否存在特殊字符/[ +.-]/。仅在测试字符串中不存在任何不需要的内容后运行这些。

var whole = /^\+?[0-9 \.-]+$/
function validate(input) {
    // input only contains valid things
    if (!input.test(whole)) { return "Input must contain only numbers, spaces, and + . or -"; }
    // input contains each required thing
    if (!input.test(/[0-9]/)) { return "Number required"; }
    if (!input.test(/[ .-]/)) { return "Special character required"; }

    // You can also test the first character of the string with charAt()
    if (input.charAt(0) !== "+") { return "Input does not begin with +"; }
    return "Valid input";
}

我注意到你的正则表达式测试零或一加,后跟列表中的一个字符[数字,空格,句号或连字符]。你的意思是测试任何数量的加号?我发布的正则表达式(/[ +.-]/)应该适用于您想要允许的所有字符。

我不确定这是您正在寻找的内容,但如果您想验证字符串中是否存在特定的单个字符或模式,则可以使用indexOf

// Require at least one hyphen
if (input.indexOf("-") === -1) { return "Please include a hyphen"; }

更新:如果在您的示例中,只有一个加号并且它位于开头,那么您确实需要\+?位。但是,您不需要在方括号内转义句点。假设需要加号,您可以使用charAt来测试它。查看更新的示例。

答案 1 :(得分:1)

  

这是有效接受输入的示例。

     

+ 1-2 12-98765.43>要求是它应该只接受'+'符号,超广,数字,空格

接受的输入似乎也接受.字符?

尝试^(\+\d-\d \d{2}-\d+)(?:\.\d+|$)

<form>
  <input type="text" pattern="^(\+\d-\d \d{2}-\d+)(?:\.\d+|$)" required />
  <input type="submit" />
</form>

答案 2 :(得分:1)

只需添加lookahead

^(?=.*[0-9])\+?[0-9 \.-]+$

参见演示。

https://regex101.com/r/eB8xU8/9