我已经有了一些工作代码,但我需要有人帮助解释为什么它可以工作!
我使用PHP来替换字符串中的任何内容,如果它不是az,AZ,0-9,逗号,分号,下划线或连字符(最终应该代表单个用户名,或者逗号/分号分隔)用户名列表).
以下作品:
$data = preg_replace('/[^,;a-zA-Z0-9_-]/s', '', $data);
Run Code Online (Sandbox Code Playgroud)
但以下不是:
$data = preg_replace('/[^a-zA-Z0-9_-,;]/s', '', $data);
Run Code Online (Sandbox Code Playgroud)
为什么只有在逗号和分号开头时这才有效?将它们放在最后似乎会破坏事物(这是我在遇到/ [^ a-zA-Z0-9 _-]/s时最初尝试过的事情.
顺便说一句,我也使用以下内容修剪任何尾随的分号(复数)或逗号(复数),有人可能会建议一个更有效和/或更优雅的方式来做到这一点?:
if(preg_match('/;$/', $data))
{
$data = rtrim($data, ';' );
}
if(preg_match('/,$/', $data))
{
$data = rtrim($data, ',' );
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助 :)
我想要一个选定的下拉菜单只读,我需要使用jQuery选择器动态地执行此操作.如果我使用以下方法将其设置为禁用
$("#dropdownDepartment").attr("disabled","disabled").trigger('chosen:updated');
Run Code Online (Sandbox Code Playgroud)
值不是POST但我需要它.
我试过了
$("#dropdownDepartment").attr('readonly',true).trigger('chosen:updated');
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
我正在使用Chosen v1.4.2和jQuery v2.1.4.
帮助赞赏!谢谢.
这里有点奇怪的问题.我们使用的脚本是:
$username = "itrpo"
$url = "https://homepages.domain.com/cgi-bin/checkperms.cgi?user=$username"
$homepagesUser = "REMOVED"
$homepagesPass = "REMOVED"
$webclient = New-Object System.Net.WebClient
$webclient.Credentials = new-object System.Net.NetworkCredential($homepagesUser, $homepagesPass)
$result = $webclient.DownloadString($url)
Run Code Online (Sandbox Code Playgroud)
从我的桌面(Windows 8,使用.NET v4.0.30319的PowerShell v3)运行时,它可以正常运行.从服务器(Windows Server 2008 R2,使用.NET v2.0.50727的PowerShell v2)运行时,它不会.最终它会挂起并返回错误:使用"1"参数调用"DownloadString"的异常:"操作已超时"
使用NetMon我设法确定在服务器上它无法执行任何TLS客户端密钥交换.
homepages.domain.com的SSL证书实际上是一个SAN证书,主页是实际服务器名称的别名(我们称之为servera.domain.com).当我在脚本中更改$ url以使用实际的服务器名称时:
$url = "https://servera.domain.com/cgi-bin/checkperms.cgi?user=$username"
Run Code Online (Sandbox Code Playgroud)
...它工作正常,但这并不理想(如果将服务移动到另一台机器,脚本将会中断).
似乎PowerShell v2(.NET v2)出现SAN证书问题?支持这一点的进一步证据是我们将上述样式脚本用于另一台具有标准SSL证书的服务器,它可以很好地进行通信.
可能是因为正在使用的WebClient类的差异?以下是.NET v2下的文档:http: //msdn.microsoft.com/en-us/library/system.net.webclient%28v=vs.80%29.aspx 及其.NET下的文档v4:http: //msdn.microsoft.com/en-us/library/system.net.webclient%28v=vs.100%29.aspx
我不太了解编程以正确解释上述文档(或者知道我是否在正确的轨道上).
理想情况下,我们希望该脚本在PowerShell v2和.NET v2下运行,而无需升级或强制PowerShell使用.NET v4.如果我的怀疑是正确的,我们可以指定参数/修改脚本以"修复"此问题的方法吗?
非常感谢任何建议.
我在PHP中使用了一些正则表达式来验证通过表单传递的UNC路径.它应该是这样的格式:
\\server\something
Run Code Online (Sandbox Code Playgroud)
...并允许进一步的子文件夹.尽管如果需要我可以使用substr轻松地执行此操作,但最好去除尾部斜杠以保持一致性.
我在网上看到,在PHP中匹配一个反斜杠需要4个反斜杠(当使用"C like string"时)并且我想我明白为什么(PHP转义(例如2 = 1,所以4 = 2),然后正则表达式引擎转义(剩下的2 = 1).我已经看到以下两个引用的等价合适的正则表达式匹配单个反斜杠:
$regex = "/\\\\/s";
Run Code Online (Sandbox Code Playgroud)
或者显然这也是:
$regex = "/[\\]/s";
Run Code Online (Sandbox Code Playgroud)
然而,这些产生了不同的结果,这与我最终的目标相匹配,以匹配完整的UNC路径.
要查看我是否可以匹配两个反斜杠,我使用以下测试:
$path = "\\\\server";
echo "the path is: $path <br />"; // which is \\server
$regex = "/\\\\\\\\\/s";
if (preg_match($regex, $path))
{
echo "matched";
}
else
{
echo "not matched";
}
Run Code Online (Sandbox Code Playgroud)
然而,上面似乎匹配两个或更多反斜杠:(模式是8斜杠,转换为2,所以为什么3个反斜杠($path = "\\\\\\server")的输入匹配?
我想也许以下可行:
$regex = "/[\\][\\]/s";
Run Code Online (Sandbox Code Playgroud)
再一次,没有:(
我跳出窗外请帮忙大声笑:)
我希望在数组中的所有元素前面加上美元符号。例子:
$array = "group1","group2"
Run Code Online (Sandbox Code Playgroud)
需要成为:
$group1
$group2
Run Code Online (Sandbox Code Playgroud)
我知道这可以通过循环命令并构造一个新数组来完成,但我知道这必须可以通过一个衬垫和一些正则表达式来完成。
我一直在沿着以下路线工作:
$array -replace "^(.+)$","replace goes here"
Run Code Online (Sandbox Code Playgroud)
我知道并且$&会$+返回匹配项,但是无论我使用什么转义来插入$,我都看不到让它工作。
感谢帮助!