正则表达式javascript,为什么点和逗号匹配\

can*_*man 21 javascript regex

为什么这个正则表达式'^[0-9]+\.?[0-9]*$'匹配12.2和12,2?

的jsfiddle

var dot = '12.2',
    comma = '12,2',
    regex = '^[0-9]+\.?[0-9]*$';

alert( dot.match(regex) );
alert( comma.match(regex) );
Run Code Online (Sandbox Code Playgroud)

虽然它适用于regexpal.com

mae*_*ics 43

因为变量regex是一个字符串,所以转义序列\.就是.,它匹配任何字符(换行符除外).如果您更改正则表达式的定义以使用RegExp文字语法或转义转义字符(\\.),那么它将按预期工作.

var dot = '12.2'
  , comma = '12,2'
  , regex = /^[0-9]+\.?[0-9]*$/;
      // or '^[0-9]+\\.?[0-9]*$'
alert(dot.match(regex));
alert(comma.match(regex));
Run Code Online (Sandbox Code Playgroud)


Ste*_*ung 10

你确定你不需要逃避反斜杠吗?它是一个字符串,你知道......

regex = /^[0-9]+\.?[0-9]*$/
Run Code Online (Sandbox Code Playgroud)

要么

regex = "^[0-9]+\\.?[0-9]*$"
Run Code Online (Sandbox Code Playgroud)

实际上,我建议你这样写:

regex = /^\d+(\.\d+)?$/
Run Code Online (Sandbox Code Playgroud)