【发布时间】:2019-06-28 11:00:36
【问题描述】:
我一直在学习如何使用控制台和 Firefox 的 ScratchPad。
我有一个表单,我正在编写基于正则表达式的验证。到目前为止,它完全符合我的要求。问题是我觉得它太多了。每个输入都需要不同的模式,并非全部都是必需的。
我试图想出一个 for 循环来处理这个问题,但它没有给我每个单独输入所需的控制。有没有办法只为某些输入编写 for 循环?或者我是否必须为每个正则表达式编写一个 for 循环
如果我所拥有的是正确的方法,是否至少有一种更短的方法来编写它?
请记住,此时我只是在编写所有正则表达式时测试它们,因此红色笔划绿色笔划。这不是一个验证问题。我只想知道一个更短的语法,而不是逐行编写, 因为我有大约 16 个输入要考虑。
// grabs the form
var myForm = document.forms["main-contact"]
// regular expressions
var onlyText = /^[A-Za-zÀ-ÖØ-öø-ÿ]+$/;
var textNumbers = /^[A-Za-zÀ-ÖØ-öø-ÿ0-9\s]+$/;
var onlyEmail = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;
// Testing value matches the regular expression
myForm[0].value.match(onlyText) && myForm[0].value.length >= 2 ? myForm[0].setAttribute("style","outline: unset") : myForm[0].setAttribute("style","outline: 2px solid crimson");
myForm[1].value.match(onlyText) && myForm[1].value.length >= 2 ? myForm[1].setAttribute("style","outline: unset") : myForm[1].setAttribute("style","outline: 2px solid crimson");
myForm[2].value.match(onlyEmail) && myForm[2].value.length >= 2 ? myForm[2].setAttribute("style","outline: unset") : myForm[2].setAttribute("style","outline: 2px solid crimson");
myForm[3].value.match(textNumbers) && myForm[3].value.length >= 2 ? myForm[3].setAttribute("style","outline: unset") : myForm[3].setAttribute("style","outline: 2px solid crimson");
【问题讨论】:
-
改用循环?
-
您在代码中使用没有任何 cmets 的正则表达式? (这是非常糟糕的做法)
-
@MrJ:
var onlyText = /^[A-Za-zÀ-ÖØ-öø-ÿ]+$/; // text only真的比var onlyText = /^[A-Za-zÀ-ÖØ-öø-ÿ]+$/;更好,信息量更大吗? -
欣赏它。同样,这只是一个小脚本,我正在快速尝试测试新的东西。我的最终版本通常被过度评论,但现在我仍然在搞乱一切。而且由于我独自工作,如果我知道我在看什么,那么在这个阶段对我来说,cmets 并不重要。
标签: javascript shorthand