问题:我正在尝试验证用户何时只输入特殊字符而不输入任何数字。
我正在使用这个表达式
/^\+?[0-9 \.-]+$/
在验证传真时仅接受“+”号,数字,点,超大和空格。这工作正常。
但是使用该表达式,用户可以在不输入任何数字的情况下输入--------------
并被接受,因为它包含hypen。
问题:有没有办法检查输入是否包含数字?不只是所有特殊字符?
更新
这是有效接受输入的示例。
+1-2 12-98765.43
>要求是它应该只接受'+'符号,hypen,数字,空格和点。
答案 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)