更新:评论中建议我为此创建一个wiki。我已经完成了,您可以在这里找到它(如果您希望密切关注它和/或做出贡献)。
我之前从未做过这样的事情,所以我完全放弃了它。
我之前从未做过这样的事情,所以请
我想要开放的“标准”或“语言”,或者......好吧,我真的不知道该怎么称呼它......使表单验证更容易。我称之为VRS(验证规则表),但在这个阶段,一切都可以协商。
这个想法是创建一个规则表,类似于CSS,定义如何验证表单。这将需要
像这样的系统的好处是
首先是第一件事。语法/规范应该是什么样的。
我在网上看到的这种方式是可以将VRS文件指定为隐藏字段,并且应用程序在处理之前将提供的表单数据通过VRS处理器进行路由。
举个例子,你可以验证“name”字段的内容类型看起来像这个
name {
content-type: alpha;
}
content-type可以是以下三个值之一:alpha,numeric或alpha-numeric。
希望这是有道理的。我之前从未做过这样的事情所以我渴望得到别人的意见。就我而言,这是
------------------------------------------------------------
content-type: (string) alphanumeric | alpha | numeric
Restricts content to either numeric, text or alphanumeric.
------------------------------------------------------------
is-fatal: BOOL
If the rule fails, is it fatal? This could be really useful
for AJAX responses.
------------------------------------------------------------
allow-null: BOOL
wether a field can be empty or not. Good for required fields
and checkboxes
------------------------------------------------------------
pattern-match: (string) email | url | regex
match the field against a pattern.
------------------------------------------------------------
field-match: (string) field_name
compares a field to another field. eg: password confirmation
------------------------------------------------------------
greater-than: INT | FLOAT
less-than: INT | FLOAT
within-range: INT | FLOAT, INT | FLOAT
Pretty self explanatory. With regard to strings however,
the string length is compared against the params.
------------------------------------------------------------
is-unique: (func) connection(host,user,pass), (func) map(table, field)
Check the value against a field in the database to see if
it's unique.
------------------------------------------------------------
date & time validations
This i'm a bit worried about in terms of terminology. I also
want to include dynamic vars in VRS such as
@now
@today
@thisMonth
@thisYear
------------------------------------------------------------
before: STRING | VAR
after: STRING | VAR
Again, self explanatory. Although I'm unsure what the date/time
format should be. UTC?
------------------------------------------------------------
Elapsed Time:
I'm completely stuck on how to handle conditions like
"years elapsed since date is more than 16"
I don't relish the idea of rules as prolix as
years-elapsed-since-now-are-more-than:18;
years-elapsed-since-now-are-less-than:18;
最后,我在辩论,开发者应该能够在VRS中指定错误/警告,还是应该在处理响应时这样做?
所以,这需要很多东西,我希望它很清楚。我想我的问题是
感谢
更新:有些人表示这个提议的系统是一个坏主意。如果您这么认为,请提供一个不起作用的方案。认为这是一个坏主意是一回事,证明这是另一个坏主意,我希望看到证据表明这是一个坏主意,而不是更晚。如果你真的认为表单验证不容易或不那么繁琐,请解释原因。
此外,我知道表单验证不是新问题。但是,目前还没有可解决表单验证的可移植,跨平台,跨语言的解决方案,这正是本提案专门针对的问题。
答案 0 :(得分:2)
我喜欢将错误消息放入VRS的想法。但他们应该特定于失败的规则。
此外,您可能会考虑不开发一种全新的“语言”,但使用类似YAML的内容已经存在的解析。
我认为这种语言非常有用,因为您可以使用相同的VRS进行客户端和服务器端验证。
PS:这应该是社区维基。
答案 1 :(得分:0)
我认为这是一个好主意,如果你能自己维护的话。
请记住,你制作语法。这取决于你(只要看起来不错)。
不,不是真的。只要名字很明显(看起来像它们是什么),并且不会太长或令人困惑,那就没关系了。
也许您应该在未指定规则时记下规则的默认值。
答案 2 :(得分:-2)
好主意/坏主意?
一般来说,这种事情是个坏主意。这就是PHP的用途。
http://www.phpformclass.com/出了什么问题 http://www.x-code.com/vdaemon_web_form_validation.php 或其他PHP表单管理工具?
这是正确的语法吗?
没有。 PHP出了什么问题?对于这种事情,它有很好的语法。
是否有更优雅的方式来命名规则。
是。 PHP对象类。众多其他项目。您不是第一个验证表单输入的人。
缺少什么。
回答基本问题: PHP出了什么问题?
已经执行此操作的相关项目列表以及具体的原因,为什么您的项目优于所有其他已经存在的项目。