整数/十进制用户输入:如何序列化/存储值

时间:2018-06-25 17:51:58

标签: javascript ruby postgresql graphql apollo

我们的堆栈当前为:React SPA / Apollo / GraphQL / Rails / PostgreSQL。

我们有一个带有数字输入的Web表单,可以(或不)用于输入十进制值(动态/用户创建的表单)。

我们希望表格宽大(它具有自动保存功能)。如果用户键入,317,,则将其视为有效的数字值。但不要太宽容,该数字应可解析为浮点数,并可以显示在图形中...

此外,当用户再次访问该表单时,我们要确保将输入的数字与他最初键入的值完全相同(我的意思是,,3不会变得神奇0,3

对于我们的堆栈,我想知道如何在不丢失初始用户输入值的情况下进行序列化(作为GraphQL有效负载发送)和存储(在PostgreSQL中)和操纵(在JS / Ruby中)这样的数字。


我认为发送/存储字符串会更简单,只要它已被验证可以解析即可。

只是想知道是否有一个“适当的”解决方案,例如使用数字库,自定义GraphQL标量类型,十进制SQL类型...对我来说似乎很复杂,以前有人做过类似的事情吗?

2 个答案:

答案 0 :(得分:1)

创建两个字段。一种用于用户输入,另一种用于解析值。我认为这对于任何堆栈都不会有所不同。

挑战在于如何向用户展示您如何理解输入的价值。这可以通过在文本字段下使用带有解析值的提示来解决。

答案 1 :(得分:1)

您应该选择输入类型为“文本”而不​​是数字,以便可以为输入创建特定格式。首先,向您的州添加属性

void value_array_write(ValueArray* array, Value value);

表单中金额输入部分应如下:

class BinaryTree():
    def __init__(self, data):
        self.left = None
        self.right = None
        self.data = data

    def tree_insert(self, data):
        if (data < self.data):
            if (self.left != None):
                self.tree_insert(data, self.left)
            else:
                self.left = BinaryTree(data)
        else:
            if (self.right != None):
                self.tree_insert(data, self.right)
            else:
                self.right = BinaryTree(data)

上面函数中的

regexp表示以-开头的任意数字开头,并且u可以以2个小数结尾。您可以为您的表格进行更改。

如果您只想为价格加上正数,则可以使用此正则表达式:

state={amount:""}