找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: Lispboy

[字符串] (XD::String:IsNum)判断一个字符串是否是纯数字

[复制链接]

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-8-3 23:22:38 | 显示全部楼层

很好,准备用你这个了。

另外:

(setq match1 "[0-9]"
                ret1 (xd::string:regexps match1 str "")
            )


这个是考虑的什么情况?

点评

得保证里面有个数字。 不然“-.”的情况判断不了.  详情 回复 发表于 2013-8-3 23:32
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-3 23:32:47 | 显示全部楼层
Lispboy 发表于 2013-8-3 23:22
很好,准备用你这个了。

另外:

得保证里面有个数字。 不然“-.”“+” “-” “.”的情况判断不了.

点评

你看看能给组合到一个匹配串里面不? 要不以后用替换函数,匹配串容易造成误伤了。我开始写的,就是把每个情况给”或“上了,显得长了。 还有,要根据这个,写那个以数字结尾的匹配,你也试试?  详情 回复 发表于 2013-8-3 23:50
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-8-3 23:50:10 | 显示全部楼层
wowan1314 发表于 2013-8-3 23:32
得保证里面有个数字。 不然“-.”“+” “-” “.”的情况判断不了.

你看看能给组合到一个匹配串里面不? 要不以后用替换函数,匹配串容易造成误伤了。我开始写的,就是把每个情况给”或“上了,显得长了。

还有,要根据这个,写那个以数字结尾的匹配,你也试试?

点评

再试试这样的。。 我大概测了下应该都考虑到了! 你再测试看看  详情 回复 发表于 2013-8-4 13:29
嗯。 确实。 以后要继续用这个正则表达式 那么必须得一次写出来。  详情 回复 发表于 2013-8-4 00:05
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-4 00:05:59 | 显示全部楼层
Lispboy 发表于 2013-8-3 23:50
你看看能给组合到一个匹配串里面不? 要不以后用替换函数,匹配串容易造成误伤了。我开始写的,就是把每 ...

嗯。 确实。 以后要继续用这个正则表达式  那么必须得一次写出来。

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-4 13:29:25 | 显示全部楼层
本帖最后由 wowan1314 于 2013-8-4 13:31 编辑
Lispboy 发表于 2013-8-3 23:50
你看看能给组合到一个匹配串里面不? 要不以后用替换函数,匹配串容易造成误伤了。我开始写的,就是把每 ...

再试试这样的。。  我大概测了下应该都考虑到了!  你再测试看看. 我的正则都是乱写的。
  1. (defun t1 (str / ret)
  2.   (if (setq match
  3.     "^[+|-][0-9]+(\.)?[0-9]+$|^[+|-][0-9]*(\.)?[0-9]+$|^[+|-][0-9]+(\.)?[0-9]*$|^[0-9]+(\.)?[0-9]*$|^[0-9]*(\.)?[0-9]+$"
  4.             ret (yy-str-xxexp match str "")
  5.       )
  6.     (list (car ret) match)
  7.   )
  8. )

点评

帮你简化了 1、 ^ $ 只用了一个 2、 +- 的 只用了一个(提出去,后面括号上) 3、 [0-9] 用了 //d 替换 变成: "^(([+|-](\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*))|\\d+(\.)?\\d*|\\d*(\.)?\\d+)$  详情 回复 发表于 2013-8-4 14:16
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-4 13:39:19 | 显示全部楼层
正则就是一顿乱写。达到效果就好。 写的也许不够简练。

点评

貌似还可以再简化: 葛老测测这个 "^[+|-]?(\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*)$" 原来的: 修改一次的: 命令: (xd::string:regexps "^[+|-]?(\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*)  详情 回复 发表于 2013-8-4 15:03
\\d+ 能用\\d*替代不,会丢失哪种情况?  详情 回复 发表于 2013-8-4 14:52
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-4 14:16:28 | 显示全部楼层
本帖最后由 newer 于 2013-8-4 14:19 编辑
wowan1314 发表于 2013-8-4 13:29
再试试这样的。。  我大概测了下应该都考虑到了!  你再测试看看. 我的正则都是乱写的。

帮你简化了

1、 ^ $ 只用了一个
2、 +- 的 只用了一个(提出去,后面括号上)
3、 [0-9] 用了 \\d 替换

变成:      "^(([+|-](\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*))|\\d+(\.)?\\d*|\\d*(\.)?\\d+)$"
原来的:  "^[+|-][0-9]+(\.)?[0-9]+$|^[+|-][0-9]*(\.)?[0-9]+$|^[+|-][0-9]+(\.)?[0-9]*$|^[0-9]+(\.)?[0-9]*$|^[0-9]*(\.)?[0-9]+$"

你的逻辑没改变,不知道逻辑是否还可以简化。

你试试上面替换后的是否和你原来的一样。

评分

参与人数 1D豆 +5 收起 理由
wowan1314 + 5 顺眼多了。赞个

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-4 14:52:22 | 显示全部楼层
wowan1314 发表于 2013-8-4 13:39
正则就是一顿乱写。达到效果就好。 写的也许不够简练。

\\d+ 能用\\d*替代不,会丢失哪种情况?

点评

两种不一样啊。  发表于 2013-8-4 15:06
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-4 15:03:18 | 显示全部楼层
本帖最后由 newer 于 2013-8-4 15:04 编辑
wowan1314 发表于 2013-8-4 13:39
正则就是一顿乱写。达到效果就好。 写的也许不够简练。

貌似还可以再简化:

葛老测测这个



最新的:         "^[+|-]?(\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*)$"
修改一次的:   "^(([+|-](\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*))|\\d+(\.)?\\d*|\\d*(\.)?\\d+)$"
原来的:          "^[+|-][0-9]+(\.)?[0-9]+$|^[+|-][0-9]*(\.)?[0-9]+$|^[+|-][0-9]+(\.)?[0-9]*$|^[0-9]+(\.)?[0-9]*$|^[0-9]*(\.)?[0-9]+$"

命令: (xd::string:regexps "^[+|-]?(\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*)$" "4.5" "")
("4.5")

命令: (xd::string:regexps "^[+|-]?(\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*)$" "-4.5" "")
("-4.5")

命令: (xd::string:regexps "^[+|-]?(\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*)$" "+4.5" "")
("+4.5")

命令: (xd::string:regexps "^[+|-]?(\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*)$" ".5" "")
(".5")

命令: (xd::string:regexps "^[+|-]?(\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*)$" "5." "")
("5.")

命令: (xd::string:regexps "^[+|-]?(\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*)$" "-.5" "")
("-.5")

命令: (xd::string:regexps "^[+|-]?(\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*)$" "." "")
nil

命令: (xd::string:regexps "^[+|-]?(\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*)$" "-." "")
nil

点评

你测试下"A0" 命令: (T1 "A0") ("A0" "^[+|-]?(\\d+(.)?\\d+|\\d*(.)?\\d+|\\d+(.)?\\d*)$")  详情 回复 发表于 2013-8-4 15:10
==。我来测试下。  详情 回复 发表于 2013-8-4 15:07
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-4 15:07:28 | 显示全部楼层
newer 发表于 2013-8-4 15:03
貌似还可以再简化:

葛老测测这个

==。我来测试下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-4 15:10:38 | 显示全部楼层
本帖最后由 wowan1314 于 2013-8-4 15:12 编辑
newer 发表于 2013-8-4 15:03
貌似还可以再简化:

葛老测测这个

你测试下"A0"
好像我原来写的就存在这个情况!!  {:soso_e144:}

命令: (T1 "A0")
("A0" "^[+|-]?(\\d+(.)?\\d+|\\d*(.)?\\d+|\\d+(.)?\\d*)$")

点评

葛老,我看咱就设定个大多数人都习惯的 不带符号(CAD中基本没负数, -做连字符用吧) 有小数点前后都必须有数字,否则按字符处理,比如:A. 句号 A.1 连字符 的规则吧。 这样好像:(xd::string:regex  详情 回复 发表于 2013-8-4 16:48
单独一个,没问题,奇了怪了啊 命令: (xd::string:regexps "^[0-9]+$" "a0" "") nil 命令: (xd::string:regexps "^[0-9]+$" "0" "") ("0")  详情 回复 发表于 2013-8-4 16:00
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-8-4 15:48:26 | 显示全部楼层
本帖最后由 st788796 于 2013-8-4 15:50 编辑

_$ (xd::string:regexps "^[+|-]?(\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*)$" "1e2" "")
("1e2")
_$ (xd::string:regexps "^[+|-]?(\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*)$" "1a2" "")
("1a2")
_$ (xd::string:regexps "^[+|-]?(\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*)$" "1e-2" "")
nil
_$ (xd::string:regexps "^[+|-]?(\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*)$" "a1" "")
("a1")
_$ (xd::string:regexps "^[+|-]?(\\d+(\.)?\\d+|\\d*(\.)?\\d+|\\d+(\.)?\\d*)$" "A1" "")
("A1")
_$
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-8-4 15:56:32 | 显示全部楼层
验证数字:^[0-9]*$
验证n位的数字:^\d{n}$
验证至少n位数字:^\d{n,}$
验证m-n位的数字:^\d{m,n}$
验证零和非零开头的数字:^(0|[1-9][0-9]*)$
验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
验证非零的正整数:^\+?[1-9][0-9]*$
验证非零的负整数:^\-[1-9][0-9]*$
验证非负整数(正整数 + 0)  ^\d+$
验证非正整数(负整数 + 0)  ^((-\d+)|(0+))$
整数:^-?\d+$
非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$
正浮点数   ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
非正浮点数(负浮点数 + 0) ^((-\d+(\.\d+)?)|(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+)?$

点评

这个要按上面朋友的严格定义,都有不适合的情况 比如 +.1 -.1 .1 +1. 这些都算数字的。  详情 回复 发表于 2013-8-4 16:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-4 16:00:05 | 显示全部楼层
wowan1314 发表于 2013-8-4 15:10
你测试下"A0"
好像我原来写的就存在这个情况!!  

单独一个,没问题,奇了怪了啊


命令: (xd::string:regexps "^[0-9]+$" "a0" "")
nil

命令: (xd::string:regexps "^[0-9]+$" "0" "")
("0")

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-4 16:02:10 | 显示全部楼层
st788796 发表于 2013-8-4 15:56
验证数字:^[0-9]*$
验证n位的数字:^\d{n}$
验证至少n位数字:^\d{n,}$

这个要按上面朋友的严格定义,都有不适合的情况

比如

+.1
-.1
.1
+1.

这些都算数字的。

点评

这些是 Autolisp 的特殊写法, 只能逐个写了  详情 回复 发表于 2013-8-4 16:25
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-23 01:12 , Processed in 0.273911 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表