Javascript 将带/不带分隔符的输入数字转换为整数

Javascript 将带/不带分隔符的输入数字转换为整数,javascript,formatting,numbers,Javascript,Formatting,Numbers,我试图只允许输入[0-9],和,,因为我只希望用户能够输入带分隔符和不带分隔符的数字。以下是我希望允许的测试: 1000 == 1.000,00 1000 == 1,000.00 1000 == 1.000 1000 == 1,000 1000 == 1000 用户如何键入这些内容完全取决于他们以及他们通常做什么。我想检查用户输入的内容是否等于1000 最好的方法是什么?我需要以上所有案例都是真实的。来自评论: 通常,如果在分隔符后键入三个数字,则表示 千这很常见。当您只键入2时,通常 指整

我试图只允许输入
[0-9]
,因为我只希望用户能够输入带分隔符和不带分隔符的数字。以下是我希望允许的测试:

1000 == 1.000,00
1000 == 1,000.00
1000 == 1.000
1000 == 1,000
1000 == 1000
用户如何键入这些内容完全取决于他们以及他们通常做什么。我想检查用户输入的内容是否等于
1000

最好的方法是什么?我需要以上所有案例都是真实的。

来自评论:

通常,如果在分隔符后键入三个数字,则表示 千这很常见。当您只键入2时,通常 指整的分或百分之一(基本上是1-99)

基于此,我提出以下解决方案:

  • 将所有分隔符(
    )后跟两位数字,并将字符串末尾替换为小数点
  • 删除所有不后跟两位数字和字符串结尾的分隔符
  • 使用
    parseFloat()
    将经过清理的值解析为一个数字
  • var值=[“1.000,00”、“1000.00”、“1.000”、“1000”、“1000”];
    values.forEach(值=>{
    让sanitized=value.replace(/[,](?=\d{2}$)/g,,).replace(/[,](?!\d{2}$)/g,,);
    let number=parseFloat(消毒);
    console.log(编号==1000);
    });来自注释:

    通常,如果在分隔符后键入三个数字,则表示 千这很常见。当您只键入2时,通常 指整的分或百分之一(基本上是1-99)

    基于此,我提出以下解决方案:

  • 将所有分隔符(
    )后跟两位数字,并将字符串末尾替换为小数点
  • 删除所有不后跟两位数字和字符串结尾的分隔符
  • 使用
    parseFloat()
    将经过清理的值解析为一个数字
  • var值=[“1.000,00”、“1000.00”、“1.000”、“1000”、“1000”];
    values.forEach(值=>{
    让sanitized=value.replace(/[,](?=\d{2}$)/g,,).replace(/[,](?!\d{2}$)/g,,);
    let number=parseFloat(消毒);
    console.log(编号==1000);
    
    });1.003
    是一千零三,还是一千零三?@RobbyCornelissen如果您在分隔符后键入三个数字,通常表示一千。这很常见。当你只输入2时,它通常意味着0.5分或0.9分(基本上是1-99分)。请告诉我为什么这被否决了。我不是否决者,但基本上这是猜测工作。在不知道区域设置的情况下,您如何知道
    1.003
    是一千零三,还是一千零三?@RobbyCornelissen如果您在分隔符后键入三个数字,通常表示一千。这很常见。当你只输入2时,它通常意味着一个整数的分或百分之一(基本上是1-99)。老实说,这是一个非常好的解决方案。唯一的例外是
    1000,00
    通常不好。人们通常会认为这意味着
    1
    。我认为常见的规则是“可以使用逗号或点作为分隔符”,这意味着
    1000,00
    从技术上讲不是一个格式正确的数字。我认为任何数字解析器都不会允许
    1000,00
    ,即使指定了区域设置也是如此。我找不到最好的方法来实现这一点,因此它根本不会让用户感到困惑。现在正在检查用户的输入是否为
    =1000
    。如果用户键入
    1.000000
    我猜正确的数字是
    1000
    ,对吗?因为你基本上是想用两个分隔符来分隔千分之一,这在技术上是非法的。在我看来,最好的方法是获取用户的区域设置(或者从你可能拥有的某种用户配置文件,或者直接从浏览器本身),然后根据用户的区域设置解析数字。对于'1.000000',一千和一百万都是正确的,这取决于语言环境。不过,我想支持所有输入。我的地区设置为en-US,即使我真的是dadk(我更喜欢英语)。我不想把用户限制在任何一个。老实说,这是一个很好的解决方案。唯一的例外是
    1000,00
    通常不好。人们通常会认为这意味着
    1
    。我认为常见的规则是“可以使用逗号或点作为分隔符”,这意味着
    1000,00
    从技术上讲不是一个格式正确的数字。我认为任何数字解析器都不会允许
    1000,00
    ,即使指定了区域设置也是如此。我找不到最好的方法来实现这一点,因此它根本不会让用户感到困惑。现在正在检查用户的输入是否为
    =1000
    。如果用户键入
    1.000000
    我猜正确的数字是
    1000
    ,对吗?因为你基本上是想用两个分隔符来分隔千分之一,这在技术上是非法的。在我看来,最好的方法是获取用户的区域设置(或者从你可能拥有的某种用户配置文件,或者直接从浏览器本身),然后根据用户的区域设置解析数字。对于'1.000000',一千和一百万都是正确的,这取决于语言环境。不过,我想支持所有输入。我的地区设置为en-US,即使我真的是dadk(我更喜欢英语)。我不想把用户限制在任何一个。