好的,考虑到正则表达式无法正常运行并且没有错误,我将尝试使用钱掩码。
目标仍然是只允许数字字符和小数。使用maskMoney,它可以帮助您。
另外,我需要能够成功计算每个细胞。
截至目前,面具运作良好,但我无法再计算了。这是我困扰的地方。
JQuery和JavaScript代码:
<script type="text/javascript" language="javascript">
$(document).ready(function(){
$('.date').mask("99/99/9999");
$('.account').mask("99-9-999999-9999");
/*calcuating the vertical and horizontal inputs*/
$('.R26').attr("disabled", "disabled");
$('.calc').maskMoney({symbol: ""});
$('.R25').unmaskMoney();
$('.R18').unmaskMoney();
$('input.description').focus(function(){
if($(this).val()=="Enter text here"){
$(this).val(" ");
}
else{
$(this).val($(this).val());
}
});
$('input.description').blur(function(){
if($(this).val()==" "){
$(this).val("Enter text here");
}
});
$('.calc').keyup(function(){
var classArray = $(this).attr('class').split(' ');
//Personal gas expense
$('.gasamount').sum("change", "#totals4");
var num = $(this).attr("id").replace(/[A-Za-z$,-]/g, "");
$('#gasmoney'+num).val(<cfoutput>#mileage#</cfoutput> * $(this).val());
$('.gasmoney').sum("change", "#totals5");
//////////////////////
//Sum of each cell
$.each(classArray, function(){
$('.'+this).sum("change", ".ttl"+this);
});
//Finding the grandtotal
var grandTotal = $('.row26').parent().children('td:last').children('input');
var sum = $('.row25').parent().children('td').children('.calc').sum();
grandTotal.val(Number(sum).toFixed(2));
});
ColdFusion和HTML代码:
#labels [r]#
<cfloop from="1" to="7" index="i">
<td id="Day#i#" class="row#r# col#i#">
<cfif r EQ 1>#Left(DayOfWeekAsString(i),3)#<cfelse><cfif r EQ 2>
<input type="text" class="date-mask" /><cfelse>
<input type="text"
<cfif labels[r] EQ "Personal Car: Mileage ##"> id="gasamount#i#" <cfelseif labels[r] EQ "Personal Car: Mileage $">id="gasmoney#i#" </cfif><cfif labels[r] EQ "Daily Totals">id="dailytotals#i#"</cfif>
class="<cfif labels[r] EQ "Personal Car: Mileage ##">gasamount<cfelse><cfif labels[r] NEQ "Daily Totals">C#i#</cfif></cfif>
<cfif labels[r] EQ "Personal Car: Mileage $">gasmoney<cfelse>calc R#r#</cfif>
<cfif labels[r] EQ "Daily Totals">ttlC#i#</cfif>"
<cfif labels[r] EQ "Daily Totals" OR labels[r] EQ "Personal Car: Mileage $">readonly="readonly"</cfif>
/></cfif>
</cfif>
</td>
</cfloop>
<td class="totals"><cfif r EQ 1>Total<cfelse><input type="text" id="totals" class="ttlR#r#" readonly="readonly" /></cfif></td>
我对同一个应用程序有类似的问题,但实际上这并不重复(如果你认为是这样的话。)。
'。'+这是由数组创建的对象。我使用cfloops创建一个大表,并添加了多个类。不得不将多个类拆分成一个数组,然后能够选择每个类作为它自己的类。
答案 0 :(得分:3)
你很可能想要
.replace(/[A-Za-z$,-]/g, "")
而不是
.replace(/[A-Za-z$-,]/g, "")
后一个表达式匹配:
A
”到“Z
”a
”到“z
”$
”到“,
”的所有字符(有这样的范围,但我不确定这是否是您的实际意图)前一个表达式(注意移位的破折号)匹配:
A
”到“Z
”a
”到“z
”$
”,
”-
”短划线在字符类中具有特殊含义,它定义了一个范围。如果要匹配文字短划线,请将其移动到字符类的结尾(或开头)。
编辑:除此之外,您似乎想要设置值。通过将新值传递到函数中来设置val()
:
$dotThis = $('.' + this);
$dotThis.val($dotThis.val().replace(/[A-Za-z$-,]/g, ""));
本声明:
$('.'+this).val().replace(/[A-Za-z$-,]/g, "");
创建一个替换的字符串并立即将其抛弃。
答案 1 :(得分:1)
可能有点简单,但为什么不使用否定? Perl语法:不确定javascript。
为什么不: 米/([^ 0-9] +)//克
0到9之间的匹配
答案 2 :(得分:0)
我的原始修复导致单元格具有相同值的原因是因为jQuery $方法返回与给定选择器匹配的每个元素。但是,调用val()只会获得第一个匹配元素的值,但通过调用val(value)设置该值将设置每个匹配元素的值。
解决方案是在每个()之上进行替换,然后只清理单个元素(this
)。如果您还要清理总计单元格,那么您可以在每个()中执行 并使用".ttl" + this
作为选择器而不是this
。
$('.calc').keyup(function(){
var classArray = $(this).attr('class').split(' ');
//Sanitize out here, so we only affect one element.
var singleCellVal = $(this).val()
singleCellVal.replace(/[A-Za-z$-,]/g, "");
$(this).val(singleCellVal);
$.each(classArray, function(){
var totalsum = $('.'+this).sum();
$('.ttl'+this).val(Number(totalsum).toFixed(2));
});
//Finding the grandtotal
var grandTotal = $('.row26').parent().
children('td:last').children( 'input');
var sum = $('.row25').parent().children( 'td').children('.calc').sum();
grandTotal.val(Number(sum).toFixed(2));
});
你想要的是
var value = $('.'+this).val();
value.replace(/[A-Za-z$-,]/g, "");
$('.' + this).val(value);
字符类中的$很好,正则表达式中的大多数元字符在字符类中并不特殊。但是,“$-,
”将匹配“$
和,
之间的任何字符。我认为这是您想要的,但如果您只想匹配$
和,
以及-
,那么您应该将该部分更改为“$,-
”(即{{1 }})。字符类末尾的/[A-Za-z$,-]/g
将匹配-
,其他任何地方都被视为范围,除非您将其转义(-
)。
答案 3 :(得分:0)
确定。所以我自己想出来了。
使用maskMoney(),我可以控制输入的字符,并且仍能正确计算表格。
我必须做的就是解决计算问题:取消屏蔽.gasamount:
$('.gasamount').unmaskMoney();
这就是修正计算问题的原因。 ^^掩码导致2行总数出现问题,这2行导致计算中断。
$('.calc').maskMoney({symbol: ""});
$('.R25').unmaskMoney();
$('.R18').unmaskMoney();
$('.calc').keyup(function(){
var classArray = $(this).attr('class').split(' ');
//Personal gas expense
$('.gasamount').sum("change", "#totals4");
var num = $(this).attr("id").replace(/[A-Za-z$,-]/g, "");
$('#gasmoney'+num).val(<cfoutput>#mileage#</cfoutput> * $(this).val());
$('.gasmoney').sum("change", "#totals5");
//////////////////////
//Sum of each cell
$.each(classArray, function(){
$('.'+this).sum("change", ".ttl"+this);
});
//Finding the grandtotal
var grandTotal = $('.row26').parent().children('td:last').children('input');
var sum = $('.row25').parent().children('td').children('.calc').sum();
grandTotal.val(Number(sum).toFixed(2));
});
每个试图帮助的人,谢谢你抽出时间!
如果有人想将此示例或代码用于将来的应用程序,请随时发表评论并告诉我,我可以设置一个不同的页面,其中包含示例和说明以及源代码。
答案 4 :(得分:-2)
Dollar($)用于标记正则表达式搜索的结束。 /[A-Za-z$-,]/
可能效果不佳。用反斜杠(\$
)逃避美元。