更改匹配以允许javascript中的空输入
我有一些在Safari中导致问题的继承代码 问题来自代码中执行以下操作的几行代码:更改匹配以允许javascript中的空输入,javascript,Javascript,我有一些在Safari中导致问题的继承代码 问题来自代码中执行以下操作的几行代码: if ( ... && $("#element1").val().match(/regex/) && ...) javascript本身是通过编程生成的 问题是,有时$(“#element1”).val()返回null,我不能轻易地在它前面加上typeof check,因为它需要将null视为空字符串 最简单(也是可管理的)解决方案是创建一个nullmatch函数并调用它,或者重
if ( ... && $("#element1").val().match(/regex/) && ...)
javascript本身是通过编程生成的
问题是,有时$(“#element1”).val()返回null,我不能轻易地在它前面加上typeof check,因为它需要将null视为空字符串
最简单(也是可管理的)解决方案是创建一个nullmatch函数并调用它,或者重写.match函数本身。然后,新函数将首先检查null,并(如果为null)传递空字符串以匹配,而不是null
我不知道该怎么做,或者哪一个最好。那
function nullString(str) {
if (str === null) {
return "";
else {
return str;
}
所以你的if语句可能会变成
if ( ... && nullString($("#element1").val()).match(/regex/) && ...)
jQuery docs for声明,当元素为select且未选择任何选项时,它返回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)
}
};
代码假定select有一个现有的钩子,您可以使用
|
操作符:
if ( ... && ($("#element1").val() || "").match(/regex/) && ...)
基本上,foo | |“
将返回foo
如果它是真的,或者如果foo
是假的,则返回空字符串(false
,undefined
,null
,空字符串,+0
,-0
或NaN
)
最好是替换或添加(例如$(“element1”).val().nullmatch(/regex/)
或
$(“element1”).val().nullToEmpty().match(/regex/)
这实际上是不可能的,因为.nullmatch
或.nullToEmpty
需要是一个可能的null
值上的方法
如果您真的想以这种方式编写,或者后端更容易生成,那么您可以编写一个迷你插件:
$.fn.valNullToEmpty = function() { return this.val() || ''; }
$("element1").valNullToEmpty().match(/regex/)
这个解决方案是可行的,但由于javascript的生成方式,将$(“element1”).val()作为一个完整的语句包围起来并不是一件小事。最好是替换或添加它(例如,
$(“element1”).val().nullmatch(/regex/)
或$(“element1”).val().nullToEmpty().match(/regex/)
)太好了!我没有想到替换val()!!感谢这是一个好的解决方案,但根据另一个解决方案,围绕$(“#element1”)和.val()对我来说并不简单,因为它们是在原始代码中单独创建的,所以我希望替换match或添加到链中。