首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带小数和单位的负/正值

带小数和单位的负/正值
EN

Stack Overflow用户
提问于 2019-02-27 13:11:05
回答 2查看 117关注 0票数 0

我正在寻找一个输入字段,它只接受带有negative/positive值的、小数、和在输入末尾预定义的(在数组中)单元

抽样接受的值如下:

代码语言:javascript
复制
var inputValue = "150px"; <---- This could be anything (from the input).
var units = ["px", "em", "%"];
var defaultUnit = "px";


100px, 100em, 100%
-100px, -100em, -100%
-100.50px, -100.50em, -100.50%

最后,我需要保存“单位”和变量中的值。如果用户没有提供一个单元,那么我应该将默认值(px)指定为该单元。

代码语言:javascript
复制
var value = 100;
var unit = %;

我想不出用、纯javascript、或ES15的方式来完成所有这些工作。有人能指引我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-27 13:19:33

使用正则表达式

代码语言:javascript
复制
const rx = /(-?[\d\.]+)(.*)/

//Group 1. optional negative sign, then digits or digits.digits
//Group 2. unit

const data = ['10px', '11.12in', '-4%']

data.forEach(it => {
  const m = rx.exec(it)
  if (m) {
    const parsed = {
      value: parseFloat(m[1]),
      unit: m[2]
    }     
    console.log(it, parsed)
  }
})

您可以巩固数字的正则表达式以拒绝多个.字符,但这是一个简单的演示。parseFloat函数也会捕获它。

票数 0
EN

Stack Overflow用户

发布于 2019-02-27 13:28:20

使用正则匹配运算可以完成以下操作:

代码语言:javascript
复制
function splitToValueAndUnit(string) {
  if(!string) {
    return { value: "", unit: "px" };
  }
  string = string.toString();
  var value = string.match(/[+-]?\d*[.]?\d*/)[0];
  var unit = string.replace(value, "")
  return {
    value: value,
    unit: unit || "px"
  }
}



console.log(splitToValueAndUnit("123px"))
console.log(splitToValueAndUnit("123%"))
console.log(splitToValueAndUnit("123"))
console.log(splitToValueAndUnit("-123"))
console.log(splitToValueAndUnit("-123px"))
console.log(splitToValueAndUnit("-123.099%"))
console.log(splitToValueAndUnit(""))
console.log(splitToValueAndUnit())
console.log(splitToValueAndUnit(123))
console.log(splitToValueAndUnit(undefined))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54906302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档