PHP Regex模式作为Javascript变量的字符串

时间:2015-05-21 20:58:02

标签: javascript php arrays regex json

所以,这可能不像我希望的那样在新的工作时间之后看起来如此直截了当...因此,为什么我在浏览其他人之后写自己的问题无济于事。它通常会引发我一个关于PHP与JS正则表达式兼容性或转换的问题并且不适用 - 据我所见,随时纠正我 - 对我的问题。

我的目标是创建一个自定义验证规则的JSON数组,以便在JS" formvalidation"插件,在PHP中使用数组生成服务器端(使用CI作为MVC框架),in which a reference to the required structure can be found here

这个自定义验证规则数组当前在PHP控制器中生成,JSON编码,传递给视图,然后通过JSON.parse解析为变量以获取所需的基于对象的结构而不是串;这很容易就行。

这里是踢球者和我被困的地方; 验证规则中的一个参数可以是正则表达式模式。在PHP数组中,它必须保持在引号内,但是当它命中JS时,需要从引号中取出它以成为正则表达式对象(?不确定这是否是正确的术语)。

我已经研究过使用RegExp对象来创建一个新的正则表达式;例如var x = new RegExp("string","/modifier");。但问题来自于当你不知道密钥是什么时,正则表达式嵌套在JSON数组中。

我目前的结构如下:

PHP验证规则数组,根据插件文档所需的结构:

$formValidationConfig = array(

        // Validation rules to be passed to the formvalidation plugin

        'name'  =>  array(

                        // Optional
                        // Element name as the array key

                        // Formatting of the array content:
                        // http://formvalidation.io/settings/#settings-structure
                        // [key] Validators (necessary wording) => [sub array]
                        //                                         [key] Validation Rule => [sub array]
                        //                                                                  [key] Validation Rule Name  => [val] Validation Parameter :: optional pair
                        //                                                                  [key] Error Message         => [val] Message Content

                        'validators' => array(

                                            'notEmpty'      =>  array(
                                                                    'message'   =>  'The full name is required'
                                                                ),
                                            'regexp'        =>  array(
                                                                    'regexp'    =>  '/^[a-zA-Z\\\s]+$/',    // Optional
                                                                                                            // The triple backslash is necessary due to JS and JSON both parsing the array
                                                                    'message'   =>  'The full name can only consist of alphabetical characters'
                                                                ),
                                            'stringLength'  =>  array(
                                                                    'max'       =>  50, // Optional
                                                                    'message'   =>  'The full name must be less than 50 characters'
                                                                )
                                        )
                    )
    );

// -----
// Further down the page (scroll)
// -----

$page = array(
    'formValidationConfig'  =>  json_encode( $formValidationConfig )
);

用于解析数组的Javascript:

var validationRules = JSON.parse( '<?=$formValidationConfig;?>' );

... aaa和JSON输出:

Object
    name: Object
        validators: Object
            notEmpty: Object
                message: "The full name is required"
            regexp: Object
                message: "The full name can only consist of alphabetical characters"
                regexp: "/^[a-zA-Z\s]+$/"
            stringLength: Object
                max: 50
                message: "The full name must be less than 50 characters"

除了正则表达式之外,它适用于所有内容。在正确设置所有对象和属性的情况下,显然吧......正则表达式。

我有一些想法:

  • 以单独的数组发送正则表达式项目。一旦它们到达页面,将它们解析为RegExp对象,但以某种方式引用PHP数组中的预定义变量名称。
  • 遍历JSON数组并解析出字符串引号,只需将正则表达式保留在JSON数组中。

拜托,请告诉我一些知识并告诉我哪里出错了!

提前致谢。 :)

0 个答案:

没有答案