Tuesday, July 7, 2020
Python初体验 - 计算股票购买或出售的最终价格
更有一段时间Windows7和Windows10都不支援ASP和VBS,
自己的编程能力就好像武功被废了,以前所写的程式如今备份储存在硬碟内,就好像一堆占位子的垃圾。
直到最近在买新笔电后,要把旧笔电的档案转到新笔电时,自己才又重新整理起自己以前这一堆曾经的资产。
意外发现,原来如今的Windows10又支援了当年的ASP和VBS,但当然微软只是支援,已经没有再为它们更新了。
为什么说资产呢?
因为我不是出生Programmer,我毕业是多媒体Designer,我是在压力之下成为了一个程式编程员。
即便如此,但我所写的第一代系统成就了我的公司,今日的系统也是参照了往日我的系统雏形而编写出来的。
如今公司迈入了13个年头,今日的这一堆卸任退休了的程式备份,曾是我最重要的、公司最重要的资产,也是我自己的骄傲。
有时看着这一堆备份程式系统档案,想着它们曾经的辉煌,曾经忙碌到处理指令都来不及,一直发生延误。
如今的系统已经是第三代了,是同事们用JAVA写的新一代系统,新系统能处理的指令更多,更快速、更强大,
看着这一堆出A到Z自我手、卸任了的第一代运作程式,我感触良多。
意外的,今天在网络上阅读到关于Python的资料,老实说恕我孤陋寡闻,Python这一词我还是今天才知道。
大约看了一下它的模式和句法,第一次接触Python,感觉Python很像我的老剪刀VBS。
但Python似乎更强大、而且编写方面反而更为简单容易。
今天我现学现做,牛刀小试马上用Python写下了一套用来计算股票购买或出售后的最终价格的小程式。
水钱当然就会是我自己所用的Broker水钱(可任意选择CIMB的Direct账户0.35%或是Maybank的Nominess账户0.1%)。
我心情感觉非常的愉悦。
我喜欢数学,即便我毕业于设计,但当初做编程时,我也喜欢编程,
因为道理就是我非常享受我Solve到难题的成就感,比如Solve到的复杂数学题,或用程式Solve到复杂的方案。
以下分享我Python初体验-可用来计算股票购买或出售的最终价格,
有CIMB Direct Acc的水钱和Maybank Nominees Acc的水钱计算供选择。
Action = input("a: Buy Shares b: Sell Shares (a/b)?")
if Action != "a" and Action != "b":
print("Please key in again")
Action = input("a: Buy Shares b: Sell Shares (a/b)?")
else:
pass
Unit = float(input("Enter Unit :"))
Price = float(input("Enter Price :"))
Gross = round(Unit * Price, 2)
print("-------------------------")
print("Gross Price =", Gross)
print("-------------------------")
print(" ")
print("Choose the Brokerage Rate (a/b) :")
print("a : CIMB Direct(0.35%)")
print("b : MBB Nominees(0.1%)")
Broker = str(input("Broker : "))
if Broker == "a":
BrokerN = "CIMB Direct Account"
BrokerA = Gross * 0.0035
if BrokerA < 12:
BrokerA = 12
else:
pass
elif Broker == "b":
BrokerN = "Maybank Nominees Account"
BrokerA = Gross * 0.001
if BrokerA < 8:
BrokerA = 8
else:
pass
elif Broker != "a" and Broker != "b":
print("Please key in again")
Broker = str(input("Broker : "))
BrokerN = ""
WStamp =input("With Stamping Fees (Y/N) ?")
if WStamp == "Y" or WStamp == "y":
StampF = int((Gross / 1000) + 1)
else:
StampF = 0
BrokerT = round(BrokerA * 1.06, 2)
ClearF = round((Gross * 0.0003) + 0.01, 2)
FeeT = round(BrokerT + StampF + ClearF, 2)
print(" ")
print(" ")
print("Broker :", BrokerN)
print("Brokerage Total = RM", BrokerT)
print("Stamping Fees = RM", StampF)
print("Clearing Fees = RM", ClearF)
print("-------------------------")
print("Total Fees = RM", FeeT)
print("-------------------------")
if Action == "a":
AmtT = Gross + FeeT
elif Action == "b":
AmtT = Gross - FeeT
print("Total Amount = RM", AmtT)
print("-------------------------")
input()
Output:
也看:
-【Python 的誕生故事】覺得其他程式語言不好用,超狂荷蘭工程師花三個月打造自己的程式語言
-Python,史上最伟大的发明 !
= Copyright by Joseph Ohlian =
Monday, August 6, 2007
ASP Escape Mode
Dim m_char,m_asc,m_hex
Dim m_temp
Dim a_arc()
Dim i
ReDim a_arc(Len(p_Message))
For i = 0 To Len(p_Message) -1
m_char = Mid(p_Message,i+1,1)
m_asc = AscW(m_char)
If m_asc < 255 Then
If (m_char = "*") Or(m_char = "+") _
Or(m_char >= "-" And m_char <= "9" ) _
Or(m_char >= "@" And m_char <= "Z" ) _
Or(m_char = "_") _
Or(m_char >= "a" And m_char <= "z" ) Then
a_arc(i) = m_char
Else
m_temp = Hex(m_asc)
If Len(m_temp) = 1 Then
a_arc(i) = "%0" & m_temp
ElseIf Len(m_temp) = 2 Then
a_arc(i) = "%" & m_temp
Else
a_arc(i) = "%u" & m_temp
End If
End If
Else
m_temp = Hex(m_asc)
If Len(m_temp) = 1 Then
a_arc(i) = "%u000" & m_temp
ElseIf Len(m_temp) = 2 Then
a_arc(i) = "%u00" & m_temp
ElseIf Len(m_temp) = 3 Then
a_arc(i) = "%u0" & m_temp
Else
a_arc(i) = "%u" & m_temp
End If
End If
Next
EscapeCode = Join(a_arc,"")
End Function
UCS-2 to Gb code
for X= 0 TO (((Len(Trim(HWord))-TStartC)/4)-1)
ASplit = Mid(Replace(Right(HWord, Len(Trim(HWord))-TStartC), " ", ""),(4*X+1),4)
IF ASplit > "0000" and ASplit < "00FF" THEN
CText = Chr(CLng("&H" & ASplit))
ELSE
CText = Unescape("%u" & ASplit)
END IF
FText = FText & CText
Next
ReadC = Left(HWord, TStartC) & FText
End Function
String to UCS-2 Convert
For i = 1 to Len(Word)
IF Asc(Mid(Word,i,1)) > 0 and Asc(Mid(Word,i,1)) < 256 THEN
CVT = "00" & Hex(Asc(Mid(Word,i,1))) 'Convert AlphaNumeric
ELSE
CVT = Replace(Escape(Mid(Word,i,1)),"%u", "") 'Convert Chinese Character
END IF
TMsg = TMsg & CVT
Next
Convert = TMsg
END Function
Friday, July 20, 2007
Web Learning
but today very siok, because o~~ i found some asp .net learning site, and long time ago i do wish to enhance my web language to asp .net, but because of lack of time to practise and without any teaching method, so cannot learn. but this now ok.
http://ajax.asp.net/docs/default.aspx
http://cht.gotdotnet.com/quickstart/aspplus/
http://www.kiwi.com.cn
http://www.voidland.com
http://elearning.stut.edu.tw/information/aspnet/asp.net1/index_1.htm
http://stevenharman.net/blog/archive/2007/07/06/use-the-pagerequestmanager-to-get-more-control-of-your-updatepanels.aspx
Ajax please goto
http://www.w3schools.com/ajax/default.asp
Thursday, July 19, 2007
Advance Printing Code
(1)
<object id="factory" style="display:none" viewastext classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
codebase="http://www.meadroid.com/scriptx/ScriptX.cab#Version=5,60,0,360"></object>
<script defer>
function SetPrintSettings() {
// -- advanced features
factory.printing.SetMarginMeasure(2) // measure margins in inches
factory.SetPageRange(false, 1, 3) // need pages from 1 to 3
factory.printing.printer = "HP DeskJet 870C"
factory.printing.copies = 2
factory.printing.collate = true
factory.printing.paperSize = "A4"
factory.printing.paperSource = "Manual feed"
// -- basic features
factory.printing.header = "This is MeadCo"
factory.printing.footer = "Advanced Printing by ScriptX"
factory.printing.portrait = false
factory.printing.leftMargin = 1.0
factory.printing.topMargin = 1.0
factory.printing.rightMargin = 1.0
factory.printing.bottomMargin = 1.0
}
</script>
(2)
<script language="javascript">
function printsetup(){
// 打印页面设置
wb.execwb(8,1);
}
function printpreview(){
// 打印页面预览
wb.execwb(7,1);
}
function printit()
{
if (confirm('确定打印吗?')) {
wb.execwb(6,6)
}
}
</script>
</head>
<body>
<OBJECT classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"
height=0 id=wb name=wb width=0></OBJECT>
<input type=button name=button_print value="打印" onclick="javascriptrintit()">
<input type=button name=button_setup value="打印页面设置" onclick="javascriptrintsetup();">
<input type=button name=button_show value="打印预览" onclick="javascriptrintpreview();">
<input type=button name=button_fh value="关闭" onclick="javascript:window.close();">
------------------------------------------------
关于这个组件还有其他的用法,列举如下:
WebBrowser.ExecWB(1,1) 打开
Web.ExecWB(2,1) 关闭现在所有的IE窗口,并打开一个新窗口
Web.ExecWB(4,1) 保存网页
Web.ExecWB(6,1) 打印
Web.ExecWB(7,1) 打印预览
Web.ExecWB(8,1) 打印页面设置
Web.ExecWB(10,1) 查看页面属性
Web.ExecWB(15,1) 好像是撤销,有待确认
Web.ExecWB(17,1) 全选
Web.ExecWB(22,1) 刷新
Web.ExecWB(45,1) 关闭窗体无提示
2、分页打印
<HTML>
<HEAD>
<STYLE>
P {page-break-after: always}
</STYLE>
</HEAD>
<BODY>
<%while not rs.eof%>
<P><%=rs(0)%></P>
<%rs.movenext%>
<%wend%>
</BODY>
</HTML>
3、ASP页面打印时如何去掉页面底部的路径和顶端的页码编号
(1)ie的文件-〉页面设置-〉讲里面的页眉和页脚里面的东西都去掉,打印就不出来了。
(2)<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="YC">
<script language="VBScript">
dim hkey_root,hkey_path,hkey_key
hkey_root="HKEY_CURRENT_USER"
hkey_path="\Software\Microsoft\Internet Explorer\PageSetup"
'//设置网页打印的页眉页脚为空
function pagesetup_null()
on error resume next
Set RegWsh = CreateObject("WScript.Shell")
hkey_key="\header"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,""
hkey_key="\footer"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,""
end function
'//设置网页打印的页眉页脚为默认值
function pagesetup_default()
on error resume next
Set RegWsh = CreateObject("WScript.Shell")
hkey_key="\header"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"&w&b页码,&p/&P"
hkey_key="\footer"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"&u&b&d"
end function
</script>
</HEAD>
<BODY>
<br/><p align=center>
<input type="button" value="清空页码" onclick=pagesetup_null()> <input type="button" value="恢复页吗" onclick=pagesetup_default()><br/>
</p>
</BODY>
</HTML>
4、浮动帧打印
<SCRIPT LANGUAGE=javascript>
function button1_onclick() {
var odoc=window.iframe1.document;
var r=odoc.body.createTextRange();
var stxt=r.htmlText;
alert(stxt)
var pwin=window.open("","print");
pwin.document.write(stxt);
pwin.document.close();
pwin.print();
}
</SCRIPT>
5、用FileSystem组件实现WEB应用中的本地特定打印
<script Language=VBScript>
function print_onclick //打印函数
dim label
label=document.printinfo.label.value //获得HTML页面的数据
set objfs=CreateObject("Scripting.FileSystemObject") //创建FileSystem组件对象的实例
set objprinter=objfs.CreateTextFile ("LPT1:",true) //建立与打印机的连接
objprinter.Writeline("__________________________________") //输出打印的内容
objprinter.Writeline("| |")
objprinter.Writeline("| 您打印的数据是:"&label& " |”)
objprinter.Writeline("| |")
objprinter.Writeline("|_________________________________|")
objprinter.close //断开与打印机的连接
set objprinter=nothing
set objfs=nothing // 关闭FileSystem组件对象
end function
</script>
服务器端脚本:
<%………
set conn=server.CreateObject ("adodb.connection")
conn.Open "DSN=name;UID=XXXX;PWD=XXXX;"
set rs=server.CreateObject("adodb.recordset")
rs.Open(“select ……”),conn,1,1
……….%> //与数据库进行交互
HTML页面编码:
<HTML>
<FORM ID=printinfo NAME="printinfo" >
<INPUT type="button" value="打印>>" id=print name=print > //调用打印函数
<INPUT type=hidden id=text1 name=label value=<%=………%>> //保存服务器端传来的数据
</HTML>
这个是调用WORD,进行打印
在<head></head>之间加入如下代码;
<OBJECT Classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WB width=0></OBJECT>
<script language=javascript>
function doPrintSetup(){
WB.ExecWB(8,1)
}
function doPrintPreview(){
WB.ExecWB(7,1)
}
</script>
在<body>中调用:
<input type=button name=button1 value="打印设置" onclick="return doPrintSetup()">
<input type=button name=button2 value="打印预览" onclick="return doPrintPreview()">
<input type=button name=button3 value="打印本页" onclick="javascriptrint()">
6、设置不想打印的部分
<style>
@media print{
.xx {display:none}
}
</style>
<table width="600" class="xx" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="60" align="center">不想打印的表格</td>
</tr>
</table>
7、利用word在客户端打印web页面
以前在asp中也碰到过实现在浏览器中打印的问题,特别是用局域网中的一些应用,以前的实现定义一个打印开始的标记,和一个结束的标记,然后调用window.print()方法,还有涉及在使用frame时候的打印问题,在msdn的文档中有关于这些的比较详细的介绍,但是,控制起来都比较的麻烦,而且对与打印比较精确的控制都比较难以实现,有很多的朋友也碰到过这个问题,最近读了一片文章,关于在web中的打印的实现(csdn),稍作修改,贴了出来,供大家参考一下,希望对大家有所帮助。
可以调用客户端的word进行打印前提是客户端必须安装word.
方法如下:
<%
Response.ContentType = "application/msword"
response.AddHeader "content-disposition", "inline; filename=report.doc"
%>
当把,一样的内容添加到,asp的上面时候,会在客户端自动调用word打开当前的文档,不过不要忘记把,response.buffer的属性设定为false。
8、在WEB环境下打印报表的crystal的解决方案的实例
<%@ LANGUAGE="VBSCRIPT" %>
<%
' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
' 从ADO Recordset直接生成报表
' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
'
' 概念:
'
' 这个应用被设计成演示怎样从ADO Recordset生成报表。我们首先建立ADO Connection和
' Recordset对象,然后用SQL语句从数据库中生成一个记录集。然后我们建立一个Crystal
' Reports对象,并把这个这个对象指向ADO recordset。最后我们将Crystal Reports
' Smart Viewer送到客户端显示这个报表。
' 第一步:建立ADO Connection and Recordset
' 一个ADO的数据库连接就是通过你已经存在的ODBC数据源(DSN)从象ASP这样的应用中来访问
' 数据的连接。为了达到这个例子的目的,我们将使用到用一个叫做"Xtreme Sample Data"的
' 连到Access数据库Xtreme.mdb系统DSN
' 建立ADO数据库连接:
Set oConn = Server.CreateObject("ADODB.Connection")
'这里建立叫做"oConn"的ADO connection,我们将用这个ADO connection对象连接到上述的DSN
'用 ADO connection 必须先要打开它:
oConn.Open("Xtreme Sample Database")
'这里打开我们的ODBC的数据源,这个数据源指向Access数据库Xtreme.mdb
'现在我们必须建立一个RecordSet对象:
set session("oRs") = Server.CreateObject("ADODB.Recordset")
'在上面我们建立了一个session("oRs"). 这个session中存放一个RecordSet对象
'将要包含用SQL语句返回的数据
'定义和生成 recordset:
session("oRs").ActiveConnection = oConn
'定义这个recordset将要使用的Connection 对象
session("oRs").Open "SELECT [Product ID], [Product Name] FROM Product"
'用SQL语句从Xtreme.mdb库的"Product"表中取出两个字段
'===================================================================================
'建立Crystal Reports 对象
'===================================================================================
'你可能注意到,Crystal Reports对象被设为session,这是因为已经需求就会被一个叫做
'"rptserver.asp"的ASP处理,为了让rptserver.asp能非常容易地访问Crystal Report对象,
'我们把这些对象都设为session。这样任何ASP页都运行在这个session中,都能够直接访问这些对象
reportname = "ADORecordset.rpt"
'这里建立一个字符串变量,指向Crystal Report文件(.rpt file),再用这段代码的时候
'换成你的Crystal Report文件名。
'建立APPLICATION 对象
If Not IsObject (session("oApp")) Then
Set session("oApp") = Server.CreateObject("CrystalRuntime.Application")
End If
'这个"if/end if" 结构用来每个session只建立一次 Crystal Reports Application对象o
'建立application对象 - session("oApp"),将Crystal Report Design Component
'automation server (craxdrt.dll)载入内存。
'
'我们建立session变量是为了再asp session过程中都使用它们.这样可以减少将craxdrt.dll
'载入和卸载的系统开销。在一个session中一旦建立了一个application对象我们就可以不必
'重建对象运行更多的报表 。
' 建立REPORT 对象
'
'这个REPORT 对象被Application的OpenReport方法建立
Path = Request.ServerVariables("PATH_TRANSLATED")
While (Right(Path, 1) <> "\" And Len(Path) <> 0)
iLen = Len(Path) - 1
Path = Left(Path, iLen)
Wend
response.Write path
'这个"While/Wend" 循环被用来将当前文件从虚拟路径(eg: http://Domain/Dir)转换成Crystal
' Report file的物理路径(eg: C:\)
'打开REPORT (先清除以前的任何对象)
If IsObject(session("oRpt")) then
Set session("oRpt") = nothing
End if
On error resume next
Set session("oRpt") = session("oApp").OpenReport(path & reportname, 1)
'这里用"PATH" 和 "reportname"变量计算出Crystal Report file的物理路径, 并打开它。
If Err.Number <> 0 Then
Response.Write "Error Occurred creating Report Object: " & Err.Description
Set Session("oRpt") = nothing
Set Session("oApp") = nothing
Session.Abandon
Response.End
End If
'这个 On erro resume next 块检查在建立report对象时出现的任何错误,我们正明确的捕获任何
'错误如果视图超过许可协议规定的最大并发用户数。
'注意,我们并不只建立一次report对象。这是因为有了ASP session 你可以处理更多的超过一个报表
' rptserver.asp将仅仅处理一个叫session("oRpt")的report对象。因此,你如果希望处理多个报表
'的话,就要建立一个新的session("oRpt")对象。
session("oRpt").MorePrintEngineErrorMessages = False
session("oRpt").EnableParameterPrompting = False
'这里不允许错误报告机制,包括Crystal Report Design Component automation server (craxdrt.dll)
'内建的错误报告,这是因为两个原因:
'1. 打印引擎是在Web Server上执行的, 所以任何错误信息都将被显示在服务端,如果在服务端报告出错了,
' 打印引擎将停止运作,你的应用将被“挂起”
'2. rptserver.asp 已经有一些错误处理逻辑在里面了,可以捕获任何非致命错误,并显示在客户端。
'
'**重要** 即使我们禁止了服务端引擎的错误处理,但是致命错误还是会在Web Server服务端被捕获,并
'显示出错误提示对话框。所以我们建议,你在"World Wide Web Publishing" service (IIS service)设置
'"Allow Service to Interact with Desktop"选项。这样如果你的ASP应用死了,你将能看到错误提示。
'现在我们必须告诉report在ADO recordset中的数据
'report建立在动态的ADO recordset的基础,我们必须基于我们建立的recordset来建立report
'然后在运行时我们告诉report数据在ADO Record set中。report通常依靠数据库结构文件
'(ADORecordset.ttx)建立,这个.ttx文件包含recordset的结构,不包含实际数据。
'一个Crystal Report完全依赖将要使用的Report的数据结构,因此在运行时你的数据库结构文件(ttx file)
'或真实反应ADO recordset包含的数据的DSN是十分重要的
session("oRpt").DiscardSavedData
set Database = session("oRpt").Database
'实例化report用到的数据库
set Tables = Database.Tables
'实例化数据库对象中的表
set Table1 = Tables.Item(1)
'实例化第一张表,在这个实例中这个表对象指向ADORecordset.ttx文件
Table1.SetPrivateData 3, session("oRs")
'"SetPrivateData"告诉report现在数据源是 recordset,现在report将要显示的数据包含在session("oRs")中
'如果你的report中包含子报表将提供不同的recordset来指向子报表的数据
'
'====================================================================================
'重新得到记录和建立"Page on Demand" Engine Object
'====================================================================================
On Error Resume Next
session("oRpt").ReadRecords
If Err.Number <> 0 Then
Response.Write "Error Occurred Reading Records: " & Err.Description
Set Session("oRpt") = nothing
Set Session("oApp") = nothing
Session.Abandon
Response.End
Else
If IsObject(session("oPageEngine")) Then
set session("oPageEngine") = nothing
End If
set session("oPageEngine") = session("oRpt").PageEngine
End If
' 实例化 CRYSTAL REPORTS SMART VIEWER
'
'在ASP环境中使用Crystal Reports automation server, 我们用相同的页来通过Crystal Web Report Server调用
'"Smart Viewers"
'有四个 Crystal Reports Smart Viewers:
'
'1. ActiveX Smart Viewer
'2. Java Smart Viewer
'3. HTML Frame Smart Viewer
'4. HTML Page Smart Viewer
'
'你使用的Smart Viewer将与你数用的浏览器兼容的,例如你将不会使用Java viewer如果你的浏览器
'不支持Java applets。为此,在这个DEMO中,我们已经选择定义一个viewer,你可以通过代码决定
'提出要求的浏览器的支持兼容性,无论如何,这个功能继承自Crystal Reports automation server,
'超过了这个示例的范围。
'基于简单的理由,我们已经选择通过ASP服务端包含的功能来实现这个功能,你可以选择不同的
'SmartViewer*.asp文件送到不同的浏览器,简单的用你想用的Smart Viewer asp文件来代替。
'这些选择是: SmartViewerActiveX.asp, SmartViewerJave.asp,SmartViewerHTMLFrame.asp,
'and SmartViewerHTMLPAge.asp.注意,使用这些包含文件时,你必须把相应的.ASP文件放在同主
'ASP文件相同的虚拟路径中。
'
'*注意* 对于 SmartViewerHTMLFrame and SmartViewerHTMLPage,你必须在虚拟路径中有framepage.asp
'文件和toolbar.asp 文件
viewer = Request.Form("Viewer")
'上面读取被使用的viewer的值,并放入变量"viewer"中
If cstr(viewer) = "ActiveX" then
%>
<!-- #include file="SmartViewerActiveX.asp" -->
<%
ElseIf cstr(viewer) = "Netscape Plug-in" then
%>
<!-- #include file="ActiveXPluginViewer.asp" -->
<%
ElseIf cstr(viewer) = "Java using Browser JVM" then
%>
<!-- #include file="SmartViewerJava.asp" -->
<%
ElseIf cstr(viewer) = "Java using Java Plug-in" then
%>
<!-- #include file="JavaPluginViewer.asp" -->
<%
ElseIf cstr(viewer) = "HTML Frame" then
Response.Redirect("htmstart.asp")
Else
Response.Redirect("rptserver.asp")
End If
'上面 If/Then/Else 被设计测试"viewer" 变量的值,基于这个值,送适当的Crystal Smart Viewer
%>
常用正则表达式
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}
匹配空行的正则表达式:\n[\s ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1><(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)(\s*$)
应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:
String.prototype.trim = function()
{
return this.replace(/(^\s*)(\s*$)/g, "");
}
利用正则表达式分解和转换IP地址:
下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:
function IP2V(ip)
{
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}
不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:
var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
利用正则表达式去除字串中重复的字符的算法程序:[注:此程序不正确,原因见本贴回复]
var s="abacabefgeeii"
var s1=s.replace(/(.).*\1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //结果为:abcefgi
我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法,最终没有找到,这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,两者串连。这个方法对于字符顺序有要求的字符串可能不适用。
得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1
s="http://www.9499.Net/page1.htm"
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
alert(s)
利用正则表达式限制网页表单里的文本框输入内容:
用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
正则表达式,相关链接
http://blog.csdn.Net/laily/category/19548.Aspx
http://blog.csdn.Net/laily/archive/2004/06/30/30525.Aspx 微软的正则表达式教程(五):选择/编组和后向引用
http://blog.csdn.Net/laily/archive/2004/06/30/30522.Aspx 微软的正则表达式教程(四):限定符和定位符
http://blog.csdn.Net/laily/archive/2004/06/30/30517.Aspx 微软的正则表达式教程(三):字符匹配
http://blog.csdn.Net/laily/archive/2004/06/30/30514.Aspx 微软的正则表达式教程(二):正则表达式语法和优先权顺序
http://blog.csdn.Net/laily/archive/2004/06/30/30511.Aspx 微软的正则表达式教程(一):正则表达式简介
http://blog.csdn.Net/laily/archive/2004/06/30/30360.Aspx 小程序大作为:高级查找/替换、正则表达式练习器、Javascript脚本程序调试器
http://blog.csdn.Net/laily/archive/2004/06/24/25872.Aspx 经典正则表达式
正则表达式,正规表达式,正则表达式匹配,正则表达式语法,模式匹配,正规表达式匹配 javascript正则表达式 Asp正则表达式 Asp.Net正则表达式 C#正则表达式 JSP正则表达式 Php正则表达式 VB.Net正则表达式 VBSCript正则表达式编程 delphi正则表达式 jscript
正则表达式 regular expression
正则表达式 RegExp
模式 pattern
匹配 Match
.Net命名空间: System.Text.RegularExpression
补充:
^\d+$ //匹配非负整数(正整数 + 0)
^[0-9]*[1-9][0-9]*$ //匹配正整数
^((-\d+)(0+))$ //匹配非正整数(负整数 + 0)
^-[0-9]*[1-9][0-9]*$ //匹配负整数
^-?\d+$ //匹配整数
^\d+(\.\d+)?$ //匹配非负浮点数(正浮点数 + 0)
^(([0-9]+\.[0-9]*[1-9][0-9]*)([0-9]*[1-9][0-9]*\.[0-9]+)([0-9]*[1-9][0-9]*))$ //匹配正浮点数
^((-\d+(\.\d+)?)(0+(\.0+)?))$ //匹配非正浮点数(负浮点数 + 0)
^(-(([0-9]+\.[0-9]*[1-9][0-9]*)([0-9]*[1-9][0-9]*\.[0-9]+)([0-9]*[1-9][0-9]*)))$ //匹配负浮点数
^(-?\d+)(\.\d+)?$ //匹配浮点数
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$ //匹配email地址
^[a-zA-z]+://匹配(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$ //匹配url
利用正则表达式去除字串中重复的字符的算法程序:
var s="abacabefgeeii"
var s1=s.replace(/(.).*\1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //结果为:abcefgi
===============================
如果var s = "abacabefggeeii"
结果就不对了,结果为:abeicfgg
正则表达式的能力有限
1.确认有效电子邮件格式
下面的代码示例使用静态 Regex.IsMatch 方法验证一个字符串是否为有效电子邮件格式。如果字符串包含一个有效的电子邮件地址,则 IsValidEmail 方法返回 true,否则返回 false,但不采取其他任何操作。您可以使用 IsValidEmail,在应用程序将地址存储在数据库中或显示在 Asp.Net 页中之前,筛选出包含无效字符的电子邮件地址。
[Visual Basic]
Function IsValidEmail(strIn As String) As Boolean
' Return true if strIn is in valid e-mail format.
Return Regex.IsMatch(strIn, ("^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)(([\w-]+\.)+))([a-zA-Z]{2,4}[0-9]{1,3})(\]?)$")
End Function
[C#]
bool IsValidEmail(string strIn)
{
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)(([\w-]+\.)+))([a-zA-Z]{2,4}[0-9]{1,3})(\]?)$");
}
2.清理输入字符串
下面的代码示例使用静态 Regex.Replace 方法从字符串中抽出无效字符。您可以使用这里定义的 CleanInput 方法,清除掉在接受用户输入的窗体的文本字段中输入的可能有害的字符。CleanInput 在清除掉除 @、-(连字符)和 .(句点)以外的所有非字母数字字符后返回一个字符串。
[Visual Basic]
Function CleanInput(strIn As String) As String
' Replace invalid characters with empty strings.
Return Regex.Replace(strIn, "[^\w\.@-]", "")
End Function
[C#]
String CleanInput(string strIn)
{
// Replace invalid characters with empty strings.
return Regex.Replace(strIn, @"[^\w\.@-]", "");
}
3.更改日期格式
以下代码示例使用 Regex.Replace 方法来用 dd-mm-yy 的日期形式代替 mm/dd/yy 的日期形式。
[Visual Basic]
Function MDYToDMY(input As String) As String
Return Regex.Replace(input, _
"\b(?
"${day}-${month}-${year}")
End Function
[C#]
String MDYToDMY(String input)
{
return Regex.Replace(input,
"\\b(?
"${day}-${month}-${year}");
}
Regex 替换模式
本示例说明如何在 Regex.Replace 的替换模式中使用命名的反向引用。其中,替换表达式 ${day} 插入由 (?
有几种静态函数使您可以在使用正则表达式操作时无需创建显式正则表达式对象,而 Regex.Replace 函数正是其中之一。如果您不想保留编译的正则表达式,这将给您带来方便
4.提取 URL 信息
以下代码示例使用 Match.Result 来从 URL 提取协议和端口号。例如,“http://www.contoso.com:8080/letters/readme.html”将返回“http:8080”。
[Visual Basic]
Function Extension(url As String) As String
Dim r As New Regex("^(?
RegexOptions.Compiled)
Return r.Match(url).Result("${proto}${port}")
End Function
[C#]
String Extension(String url)
{
Regex r = new Regex(@"^(?
RegexOptions.Compiled);
return r.Match(url).Result("${proto}${port}");
}
如何用正则表达式表示要么是数字要么是字母 是字母的话只能是一个字母 数字则无所谓?
^[a-zA-Z]$^\d+$
---------------------------------------------
-
玩过DOS版金庸群侠传的朋友一定不会忘记这套游戏的....爽快。 其中自由度大,而且游戏分歧多,你可以是正派,也可以是反派。 用一套野球拳,从第一级到第九级都是只打10~20血,但一到第10级,一拳打上650++。超爽! 中间也可以学九阳,九剑,龙相功等。 最后更爽的...
-
九月份没有记录投资总结,主要还是有点忙和懒惰的缘故吧。 九月份随着港股、新加坡和马股的回调,投资回酬萎缩,自己也在数支股项股价回跌下来的时候,也不小心接了刀子。 因此十月份,自己投资母金增加了6.08%,数额上是全年增额最高的一个月份。 自己也在买股的当儿,新加坡和港股...
-
(image get from : http://www.nightingalebenefits.com/buying/a-mortgage-in-your-future/) 年终公司给我发了股息,等这笔钱等到我颈都长了, 感谢公司在伙伴的领导下,业务稳健成长,才能给股东...
-
一直以来我只有两张信用卡,一张是CIMB Preferred Visa Infinite Card 以及 另一张是RHB Cash Back Credit Card。 两张我都用来十年、廿年了。尤其我的RHB卡,那可是从我20年前打工开时的就申请的信用卡之一。 直到最近看到A...
-
星期五,CIMB telemarketing call 上了我,Offered 3.99% 年利息的信用卡个人贷款。 据说这个低借贷利率是on CIMB selected customer。 经过粗略计算后,我即刻在电话里应允了CIMB的CashLite申请配套。 通过Ca...