我正在尝试使用pattern属性创建一个数字输入字段,因为常规类型编号不支持我需要的验证。
基本上,我想允许任何有意义的数字,包括开头的$
,+
或-
以及结尾的%
。此外,用户应该能够用逗号分隔他们的号码,以避免长号码的错误,但这不是必要的,他们仍然可以提交一个长号而不需要任何类型的分离。该字段还应允许小数。
<input required pattern="[+-]?\$?\d+(,\d{3})*(\.\d+)?%?" type="text" />
我需要允许以下示例:
通过:
故障:
这是我到目前为止的正则表达式,但它似乎不起作用,即使对于最基本的数字。我一直在使用scriptular来测试我的正则表达式,但这似乎并不反映实际HTML验证的结果。
正则表达式:[+-]?\$?\d+(,\d{3})*(\.\d+)?%?
text_field
时逃避正则表达式中的任何反斜杠。例如,答案中的正则表达式应该类似于(?:\\+|\\-|\\$)?\\d{1,}(?:\\,?\\d{3})*(?:\\.\\d+)?%?
答案 0 :(得分:1)
尝试使用以下正则表达式。
正则表达式: (?:\+|\-|\$)?\d{1,}(?:\,?\d{3})*(?:\.\d+)?%?
<强>解释强>
(?:\+|\-|\$)?
匹配数字前面的+
-
或$
,可选择使用?
量词。
\d{1,}
匹配整数部分,即使它没有,
。
(?:\,?\d{3})*
匹配多次出现的逗号分隔数字(如果存在)。
(?:\.\d+)?
匹配可选的小数部分。
%?
最后匹配可选的%
字符。
?:
代表非捕获组。它会匹配,但不会将其存储为反向引用。
<强> Regex101 Demo 强>