jsp 中正则表达式怎么返回已经匹配的值

jsp 中正则表达式怎么返回已经匹配的值,第1张

jsp里和java差不多,这里用java做示范
Pattern p = Patterncompile("(\\d{4})-(\\d{2})-(\\d{2})") //假设需要匹配一个日期
Matcher m = pmatcher("1995-02-25 2016-07-28") //用来匹配的串
while(mfind()){ //mfind()在整个串找下一个能匹配的子串,找到的指针后移,类似数据库查询中的next()方法
Systemoutprint(mgroup()) //group()默认取分组0,也可以放上其他的分组号1,2,3,这样可以依次提取出已经匹配到的值
}
//这样输出的就是
//1995-02-25
//2016-07-28

<html>
<head>
<title></title>
<script type="text/javascript">
function reg()
{
var inp= documentgetElementById("sr");
var reg=/^[0-9]+$/;
var result= regtest(inpvalue);
if(!result)
{alert("请输入数字!");
inpvalue="";
}
}
</script>
</head>
<body>
<input id="sr" type="text" onchange="reg()" />
</body>
</html>

这个要求纯粹用正则实现比较复杂,建议分2次判断,用正则判断是否数字,小写字母,中文
再获取字节长度,判断是否在4~20之间

判断是否数字,小写字母,中文的正则:
^[0-9a-z\\u4e00-\\u9fa5]+$

<html>
<head>
<script type="text/javascript">
function test(){
var obj = documentgetElementById('test');
if(!isNaN(objvalue)){
return ture;
}else{
alert("您输入的不是数字,请重新输入!");
objvalue="";
}
}
</script>
</head>
<body>
<input type="text" id="test"
onpropertychange="if(/[^0-9\\-]/igtest(value))value=valuereplace(/[0-9^\\-]/ig,'')"
oninput="value=valuereplace(/[^0-9\\-]/ig,'')"
style="ime-mode: disabled" >
<input type="button" onclick="test()" value="提交"/>
</body>
</html>

1问题出现
(1)你没有加入name为
regexp_content的控件。
(2)你的正则表达式少括号
(3)你的正则表达式方法少了非 *** 作
2解决方法
(1)添加类似以下代码
<html:text property="regexp_content"/>
(2)
<var myReg=new RegExp("^(:(:([0-9]{4}/(:(:0[1,3-9]|1[0-2])/(:29|30)|((:0[13578]|1[02])/31)))|([0-9]{4}/(:0[1-9]|1[0-2])/(:0[1-9]|1\\d|2[0-8]))|(((:(\\d\\d(:0[48]|[2468][048]|[13579][26]))|(:0[48]00|[2468][048]00|[13579][26]00))/02/29)))$"); 这行的最后少加一个括号
正确格式:var myReg=new RegExp("^(:(:([0-9]{4}/(:(:0[1,3-9]|1[0-2])/(:29|30)|((:0[13578]|1[02])/31)))|([0-9]{4}/(:0[1-9]|1[0-2])/(:0[1-9]|1\\d|2[0-8]))|(((:(\\d\\d(:0[48]|[2468][048]|[13579][26]))|(:0[48]00|[2468][048]00|[13579][26]00))/02/29))))$");
(3)if(myRegtest(date_str))改为
if(!myRegtest(date_str))

^[-][0-9]+(\\[0-9]{1,2})$
^字符串头
[-]最多一个负号
[0-9]+至少一个数字
(\\[0-9]{1,2})如果有小数点,那么小数点后面最少1位最多2位
$字符串结尾
该正则有两个BUG:
如果匹配1230这样的小数也会正确
如果匹配012345这样的也会正确
不是要求特别严格的话应该没有影响。
楼下的^[-+](([0-9]+)([]([0-9]+))|([]([0-9]+)))$
同样有上述2个BUG,并且没有限制小数点后最多2位,将后两个+改成{1,2}就可以限制为小数点后两位了,同理如果你不需要限制小数点后面的个数,将{1,2}改成+就可以。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13358806.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-21
下一篇 2023-07-21

发表评论

登录后才能评论

评论列表(0条)

保存