测试一个匹配字母和数字的正则:
pattern='/^\w+$/'
string='人 1994'
PHP 结果
Array
(
[0] => 人 1994
)
Javascript 结果
匹配不到数据
结论
PHP 是世界上最好的语言,我在这个细节上浪费了 30 分钟。
如果要匹配字母和数字最好使用以下方法:
/^[a-zA-Z\d_]+$/
1
milklee 2016-03-09 12:14:04 +08:00
虽然在 js 里 \w 是不能匹配到汉字的。。但是按照标准来说,\w 也不会匹配空格才对
所以为什么在 php 里 /^\w+$/ 会匹配到 '人 1994' 中间的空格?= = |
2
Strikeactor 2016-03-09 12:14:50 +08:00
顺便楼主例子错了,你字符串中间有空格, PHP 的匹配结果也是空的 |
3
wjfz 2016-03-09 12:15:53 +08:00
莫非是 V2E 自动加的空格?
这个孩子是 1994 年生的。 |
4
wjfz 2016-03-09 12:16:16 +08:00 1
果然是 V2 自动加的空格。
|
5
cccRaim 2016-03-09 12:16:59 +08:00
一般来说, js 后面要加个 g 才是正常的匹配结果
|
6
drush 2016-03-09 12:22:33 +08:00
排除 v2 自動加空格,有什麼問題?
|
7
xuboying 2016-03-09 12:23:07 +08:00 via Android 1
感觉用\w 匹配汉字由 locale 决定,保险起见我只用\p{Han}
|
9
lianz 2016-03-09 12:28:21 +08:00
RTFM
又是一个不看文档就直接喷的人,你干嘛不去喷飞机能在天上飞、火车能在铁轨上跑、自行车能骑呢。 |
10
zakokun 2016-03-09 12:35:17 +08:00 2
PHP 确实有很多缺点.
但是普通程序员还没那个资格喷吧? |
12
eoo 2016-03-09 13:50:14 +08:00
.......................
|
13
BOYPT 2016-03-09 13:53:59 +08:00 1
有啥好争的,本来 regex 就有好几种口味,较流行的就是 php/js/python 几种口味
https://regex101.com/ 可以在线测试 |
14
eoo 2016-03-09 13:54:49 +08:00
@Strikeactor 这是什么网站?
|
15
matsuijurina 2016-03-09 13:57:01 +08:00 via Android
当时 V2EX 自动加空格的时候就有人预料到会出现楼主这样的问题,认为不能为了排版的美观影响了内容的表达。
|
16
Jaylee 2016-03-09 14:03:22 +08:00 1
是我姿势有问题? 怎么什么阿猫阿狗都来喷? |
17
ChoateYao OP @Jaylee ![]( http://i12.tietuku.cn/27a7fe6bc4b5d413.jpg) ![]( http://i12.tietuku.cn/27a7fe6bc4b5d413.jpg)
我觉得是我的姿势有问题。 |
18
ChoateYao OP |
19
slixurd 2016-03-09 14:31:42 +08:00
我觉得是字符集问题,试了一下几个 online 的 php 运行平台,有的可以有的不行
版本没有什么影响,另外楼上的别随便喷啊,别人的运行环境都没了解.... |
20
phithon 2016-03-09 14:37:06 +08:00 1
还是跟本地编码有关系吧,允许是 php 一个 bug 吧。
国外的机器是没问题的: https://3v4l.org/rNgfi 语言有坑也正常,任何语言都有自己的坑和 BUG 。你浪费了 30 分钟,只能说明你看不穿这个问题,还得多多学习怎么解决问题,而不是怪别人。 |
22
jfcherng 2016-03-09 15:52:07 +08:00
/^\w+$/u 匹配成功!?
https://3v4l.org/mklML |
23
kungfuchicken 2016-03-09 17:27:53 +08:00
我在 Mac 上测试 PHP ( mac port 安装)是可以匹配到“人”的,但是在 Cent OS 上测试了几个版本的 PHP (编译安装和 yum 安装都有,跟 Mac 版本相同)都是匹配不到的
这个不是 PHP 的锅,而是 PCRE 库的配置导致,\w 的匹配官方文档是这么说的 A "word" character is any letter or digit or the underscore character, that is, any character which can be part of a Perl "word". The definition of letters and digits is controlled by PCRE's character tables, and may vary if locale-specific matching is taking place. For example, in the "fr" (French) locale, some character codes greater than 128 are used for accented letters, and these are matched by \w. 也就是说, PCRE 库的 character tables 配置会影响到\w 的匹配 |
24
yaxin 2016-03-09 18:38:39 +08:00
@Strikeactor 什么编辑器,这么好
|
25
Strikeactor 2016-03-09 18:51:51 +08:00
|
26
yaxin 2016-03-09 19:10:26 +08:00
@Strikeactor 谢谢,不错的编辑器,而且也不贵
|
27
ming2281 2016-03-09 19:44:44 +08:00 1
js 支持的正则元素不完整(指流行的 Perl 风格)
|
28
flynaj 2016-03-10 14:15:37 +08:00
EmEditor \w 可以匹配中文,
使用 Boost library Regex++ 的正则表达式惯例 https://zh-cn.emeditor.com/help/howto/search/search_regexp_syntax.htm |
29
yumijie 2016-03-10 15:04:17 +08:00
编码的问题好像楼主没考虑
22 楼的网友考虑了 |