更改匹配以允许javascript中的空输入

时间:2015-08-30 21:53:22

标签: javascript

我有一些继承的代码导致Safari出现问题。

问题来自代码中的几行代码:

if ( ... && $("#element1").val().match(/regex/) && ...)

javascript本身是以编程方式生成的。

问题是有时候$(“#element1”)。val()返回null,我不能轻易地在它之前放置一个typeof检查,因为它需要将null视为空字符串。

最简单(也是可管理的)解决方案是创建一个nullmatch函数并调用它或者覆盖.match函数本身。然后,新函数首先检查null,如果为null,则将空字符串传递给匹配而不是null。

我不知道该如何做,或哪个最好。

4 个答案:

答案 0 :(得分:1)

您可以使用||运算符:

if ( ... && ($("#element1").val() || "").match(/regex/) && ...)

基本上,foo || ""如果它是真实的话会返回foo,如果foo是假的falseundefined则返回空字符串, null,空字符串,+0-0NaN)。

答案 1 :(得分:1)

  

更换或添加它会更好(例如       $("element1").val().nullmatch(/regex/)或       $("element1").val().nullToEmpty().match(/regex/)

这实际上是不可能的,因为.nullmatch.nullToEmpty需要是可能null值的方法。

如果你真的想以这种方式写作,或者你的后端更容易生成,那么你可以编写一个迷你插件:

$.fn.valNullToEmpty = function() { return this.val() || ''; }

$("element1").valNullToEmpty().match(/regex/)

答案 2 :(得分:0)

怎么样......

function nullString(str) {
    if (str === null) {
        return "";
    else {
        return str;
    }

所以你的if语句可以成为

if ( ... && nullString($("#element1").val()).match(/regex/) && ...)

答案 3 :(得分:0)

val()的jQuery文档声明,当元素被选中且没有选择任何选项时,它返回null。

因此使用valHooks可能有所帮助

var originalSelectHook;
if ($.valHooks.select) {
  originalSelectHook = $.valHooks.select.get;
}

$.valHooks.select = {
  get: function(elem) {
    var index = elem.selectedIndex;
    if (index == -1 || elem.options[index].disabled) {
       return "";
    }
    else {
      return originalSelectHook(elem)
    }
};

Code假定select

存在一个钩子