正则表达式,用于检查表单中的有效输入

时间:2012-02-05 10:50:31

标签: php regex preg-match

我正在编辑现有项目,并且报告了一个错误,如果数字在输入中排在第一位,系统就不接受,例如99%Creative。但是,如果您输入Creative 99%,系统会接受它并将其保存在数据库中。

我检查现有代码,发现他们在preg_match中使用了这个表达式 / ^ [\ p {L}] + / u 。我用Google搜索并发现使用\ w但是我的大四学生不接受我的回答。他说,这是不可接受的。这会产生一些问题。

请查看下面的脚本,这是我使用的脚本:

$category= trim($_POST['category']);
if(preg_match('/\W/', $category)){
 $error='Invalid Input';
} 

他告诉我测试它,使用一些unicode字符,如果它会接受阿拉伯语文本,混合(字母数字+阿拉伯语)。一切正常,这意味着它很好,但他仍然不接受它。他告诉我要制定另一个正则表达式。

你知道我该怎么办?什么可以是我可以使用的表达。我真的不明白为什么不能接受。

3 个答案:

答案 0 :(得分:4)

The PHP manual on PCRE escape sequences表示在PCRE中,\w匹配的字符取决于区域设置(而\W\w的否定。)

这在全局环境中是不可接受的,因为您不知道使用的服务器区域设置。最后一次setlocale()电话是什么?该网站是在美国,法国,中国举办的吗?你永远都不会知道。今天可能适用的,可能不会在明天。用户更改,网站确实移动。

例如,您的老人的服务器也可能使用与您的服务器不同的区域设置。所以他们可能是对的,说它不适用于某些不属于当前语言环境的角色。

这就是他们无法接受您的解决方案的原因。您需要改为使用Unicode character properties

答案 1 :(得分:2)

\p{L}表示任何unicode字母,\w表示[a-zA-Z0-9_]

您可以使用而不是\w

[\p{L}\p{N}]+

这意味着字母或数字一次或多次。

答案 2 :(得分:2)

/^[\p{L}]+/u

表示“匹配以Unicode字母开头的字符串”。它将匹配字符串Creative中的Creative 99%

PCRE正则表达式中的

\w匹配ASCII字母,数字和下划线。

如果向字符类添加数字,也会接受以数字开头的字符串。

/^[\p{L}\p{N}]+/u

将匹配字符串99中的99% Creative