免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6572 | 回复: 11
打印 上一主题 下一主题

[正则]谁能给个把全角数字12345转为半角数字12345的函数表达式? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-29 14:37 |只看该作者 |倒序浏览
用途是这样的,比如电话号码:

我们要求的是:010-24356987
但有时候客户输入的是:010-24356987

我看一些利用js判断输入的数字是否正确,否则提示要用户重新输入,但真有菜鸟连半角也不了解,所以他老是过不了关 。

我想,不如改成允许输入010-24356987(甚至“一二三四五”都可以),在服务器端用正则把数据变为010-24356987,这样皆大欢喜。我的想法应该不错吧?哈哈哈哈......

但烦请大伙给一个实现代码用用

[ 本帖最后由 HonestQiao 于 2005-11-29 14:45 编辑 ]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
2 [报告]
发表于 2005-11-29 14:44 |只看该作者
http://w.yi.org/ftp/FAPM/PHP/php_manual_zh/function.preg-replace.html
  1. <?php
  2. // $document 应包含一个 HTML 文档。
  3. // 本例将去掉 HTML 标记,javascript 代码
  4. // 和空白字符。还会将一些通用的
  5. // HTML 实体转换成相应的文本。

  6. $search = array ("一","二","三");                  

  7. $replace = array ("1","2","3");

  8. $text = preg_replace ($search, $replace, $document);
  9. ?>
复制代码

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
3 [报告]
发表于 2005-11-29 14:47 |只看该作者
$search = explode(", "一,二,三");                  

$replace = explode(", "1,2,3");

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-11-29 14:50 |只看该作者
用乔老大的代码就可以搞定,但是需要注意全角的字符串是有编码的,有时候需要注意,不过在大多数的情况下,应该没有问题

论坛徽章:
0
5 [报告]
发表于 2005-11-29 15:17 |只看该作者
原帖由 夜猫子 于 2005-11-29 14:50 发表
用乔老大的代码就可以搞定,但是需要注意全角的字符串是有编码的,有时候需要注意,不过在大多数的情况下,应该没有问题


哦,好的,多谢乔老大和夜猫子。

论坛徽章:
0
6 [报告]
发表于 2005-11-29 16:00 |只看该作者
搞定了,必须要加上/才行:
$patterns = array (
    "/1/",
    "/2/",
    "/3/",
    "/4/",
    "/5/"     
    );
$replacements = array (
    "1",
    "2",
    "3",
    "4",
    "5"     
    );

论坛徽章:
0
7 [报告]
发表于 2005-11-29 16:25 |只看该作者
可以用 str_replace 么?也是支持 array 的。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2005-11-29 17:17 |只看该作者

  1. // 全角替换成半角
  2. function qj2bj($string){
  3.     $qj2bj = array(
  4.         '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5',
  5.         '6' => '6', '7' => '7', '8' => '8', '9' => '9', '0' => '0',
  6.         'a' => 'a', 'b' => 'b', 'c' => 'c', 'd' => 'd', 'e' => 'e',
  7.         'f' => 'f', 'g' => 'g', 'h' => 'h', 'i' => 'i', 'j' => 'j',
  8.         'k' => 'k', 'l' => 'l', 'm' => 'm', 'n' => 'n', 'o' => 'o',
  9.         'p' => 'p', 'q' => 'q', 'r' => 'r', 's' => 's', 't' => 't',
  10.         'u' => 'u', 'v' => 'v', 'w' => 'w', 'x' => 'x', 'y' => 'y',
  11.         'z' => 'z', 'A' => 'A', 'B' => 'B', 'C' => 'C', 'D' => 'D',
  12.         'E' => 'E', 'F' => 'F', 'G' => 'G', 'H' => 'H', 'I' => 'I',
  13.         'J' => 'J', 'K' => 'K', 'L' => 'L', 'M' => 'M', 'N' => 'N',
  14.         'O' => 'O', 'P' => 'P', 'Q' => 'Q', 'R' => 'R', 'S' => 'S',
  15.         'T' => 'T', 'U' => 'U', 'V' => 'V', 'W' => 'W', 'X' => 'X',
  16.         'Y' => 'Y', 'Z' => 'Z', ' ' => ' '
  17.     );

  18.     return strtr($string, $qj2bj);
  19. }

  20. echo qj2bj('1A2B');
复制代码

论坛徽章:
0
9 [报告]
发表于 2005-11-29 17:59 |只看该作者
原帖由 夜猫子 于 2005-11-29 17:17 发表
[code]
// 全角替换成半角
function qj2bj($string){
    $qj2bj = array(
        '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5',
        '6' => '6', '7' => ...


哈哈,这个简洁好用。

论坛徽章:
0
10 [报告]
发表于 2005-11-29 22:16 |只看该作者
耍酷了,我也发一个,一句话,比较全,也能替换大部分全角符号为半角符号,不支持汉字数字替换.

但在效率上没有过多的考虑,有兴趣的可以比较试试,代码如下:


  1. $str = "0123ABC\",.?<>{}[]*&^%#@!~()+-|:;";
  2. $str = preg_replace('/\xa3([\xa1-\xfe])/e', 'chr(ord(\1)-0x80)', $str);
复制代码


效率说明, 如果程序中调用次数 < 10次,用正则比用 strtr 没有明显的效率差别,当次数越来越多时,用正则的方式效率将明显落后于 strtr(), 主要原因是正则替换每次都需要建立一个"引擎",呵呵.

[ 本帖最后由 hightman 于 2005-11-29 22:21 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP