Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-如何将正则表达式^d*\.?\d{0,2}$更改为允许逗号而不是小数点?_Javascript_Regex - Fatal编程技术网

Javascript-如何将正则表达式^d*\.?\d{0,2}$更改为允许逗号而不是小数点?

Javascript-如何将正则表达式^d*\.?\d{0,2}$更改为允许逗号而不是小数点?,javascript,regex,Javascript,Regex,我正在使用模式^\d*\.?\d{0,2}$来显示货币,例如,它只允许在可选小数点之前的数字和小数点之后的两个小数点 出于本地化目的,我需要有一个选项,允许使用逗号而不是小数点,允许使用小数点而不是逗号来表示以千为单位的数字,例如,123.123,00欧元而不是123123.00欧元 我原以为用,替换,中的,很简单,但这似乎不起作用。[/,]将检查是否有点或逗号 如果没有[],您只需检查它们是否在后面^\d*\,?\d{0,2}$这对我来说很好。我用123,00对它进行了测试。下面的正则表达式似

我正在使用模式
^\d*\.?\d{0,2}$
来显示货币,例如,它只允许在可选小数点之前的数字和小数点之后的两个小数点

出于本地化目的,我需要有一个选项,允许使用逗号而不是小数点,允许使用小数点而不是逗号来表示以千为单位的数字,例如,123.123,00欧元而不是123123.00欧元


我原以为用
替换
中的
很简单,但这似乎不起作用。

[/,]
将检查是否有点或逗号
如果没有[],您只需检查它们是否在后面

^\d*\,?\d{0,2}$
这对我来说很好。我用123,00对它进行了测试。

下面的正则表达式似乎是您真正想要的:

^(?:\d{1,3}(,\d{3})*(\.\d+)?|\d{1,3}(\.\d{3})*(,\d+)?)$

说明:

\d{1,3}     match 1 to 3 numbers
(,\d{3})*   followed any amount of ,xxx groups
(\.\d+)?    followed by an optional period and then one or more numbers
解释交替的前半部分应该足够了,因为后半部分只是转换逗号和句号的角色,就像在欧洲看到的那样

下面是演示此正则表达式的示例:

console.log(/^(?:\d{1,3}(,\d{3})*(\。\d+)?\d{1,3}(\。\d{3})*(\,\d+)$/.test('1');
console.log(/^(?:\d{1,3}(,\d{3})*(\。\d+)?\d{1,3}(\。\d{3})*(\,\d+)$/.test('1');
console.log(/^(?:\d{1,3}(,\d{3})*(\。\d+)?\d{1,3}(\。\d{3})*(\,\d+)$/.test('12');
console.log(/^(?:\d{1,3}(,\d{3})*(\。\d+)?\d{1,3}(\。\d{3})*(\,\d+)$/.test(\,\d');
console.log(/^(?:\d{1,3}(,\d{3})*(\.\d+)?\d{1,3}(\.\d{3})*(\.\d+)$/.test(\.\d+));
console.log(/^(?:\d{1,3}(,\d{3})*(\.\d+)?\d{1,3}(\.\d{3})*(\.\d+)$/.test(\.\d+));
console.log(/^(?:\d{1,3}(,\d{3})*(\.\d+)?\d{1,3}(\.\d{3})*(\.\d+)$/.test(\.\d+));
console.log(/^(?:\d{1,3}(,\d{3})*(\.\d+)?\d{1,3}(\.\d{3})*(\.\d+)$/.test(\.\d+));
console.log(/^(?:\d{1,3}(,\d{3})*(\.\d+)?\d{1,3}(\.\d{3})*(\.\d+)$/.test(\.\d+));

console.log(/^(?:\d{1,3}(,\d{3})*(\.\d+)?\d{1,3}(\.\d{3})*(\.\d+)$/.test(\.\d')
/^\d*,?\d{0,2}$/
对Medoe有效似乎不起作用是一个非常精确的问题描述。到底是什么不起作用?你用什么样的样本来测试这个问题?
/^\d*(?:,\d{3})*\.(?:\.\d{3})*,,?)\d{0,2}$/
应该适用于这两种情况