将检查表单中有效输入的正则表达式


Regular expression that will check valid inputs from a form

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

我检查了现有的代码,发现他们在preg_match中使用了这个表达式/^[''p{L}]+/u。我在谷歌上搜索了一下,发现用了-w,但我的学长不接受我的答案。他说这是不可接受的。这会引起一些问题。

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

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

他告诉我测试一下,如果它能像阿拉伯文本一样接受(字母数字+阿拉伯),就用一些unicode字符。这一切都很好,所以它意味着它很好,但他仍然不接受。他告诉我制定另一个正则表达式。

你知道我该怎么办吗?我能用什么表达呢。我真的不明白为什么w不能被接受。

关于PCRE转义序列的PHP手册说,在PCRE中,'w匹配的字符取决于语言环境(而'W'w的否定)。

这在全局环境中是不可接受的,因为您不知道所使用的服务器区域设置。最后一次setlocale()呼叫是什么?网站是在美国、法国还是在中国?你永远不会知道。今天可能适用的,明天可能不适用。用户改变,网站也会移动。

例如,您的前辈的服务器可能会使用与您的服务器不同的区域设置。因此,他们可能说得对,对于不在当前语言环境中的某些字符,这对他们不起作用。

这就是为什么他们不能接受你的解决方案。您需要使用Unicode字符属性。

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

意思是"匹配以Unicode字母开头的字符串"。它将匹配字符串Creative 99%中的Creative

PCRE正则表达式中的'w匹配ASCII字母、数字和下划线。

如果您将数字添加到字符类中,以数字开头的字符串也将被接受。

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

将与字符串CCD_ 9中的CCD_。

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

您可以使用而不是'w:

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

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