CLR использует его, когда это компилирует во времени выполнения. Вот ссылка на MSDN, который объясняет далее.
Похоже, это должно сделать это:
^[a-zA-Z0-9][-a-zA-Z0-9]{0,61}[a-zA-Z0-9]$
Сопоставьте любой буквенно-цифровой символ, затем сопоставьте до 61 буквенно-цифрового символа (включая дефисы), затем сопоставьте любой буквенно-цифровой символ. Минимальная длина строки - 2, максимальная - 63. Он не работает с Unicode. Если вам нужно, чтобы он работал с Unicode, вам нужно будет добавить другие классы символов вместо a-zA-Z0-9
, но принцип будет тот же.
Я считаю правильным ] grep
выражение, которое будет работать с Unicode:
^[[:alnum:]][-[:alnum:]]{0,61}[[:alnum:]]$
Пример использования:
echo 123-abc-098-xyz | grep -E '^[[:alnum:]][-[:alnum:]]{0,61}[[:alnum:]]$'
result=$(grep -E '^[[:alnum:]][-[:alnum:]]{0,61}[[:alnum:]]$' <<< "this-will-work"); echo $result;
echo "***_this_will_not_match_***" | grep -E '^[[:alnum:]][-[:alnum:]]{0,61}[[:alnum:]]$'
Это сценарий bash, проверяющий первый параметр, содержит ли он только буквенно-цифровые символы или дефисы. Он «перенаправляет» содержимое $ 1 в grep:
#!/bin/bash
if grep '^[-0-9a-zA-Z]*$' <<<$1 ;
then echo ok;
else echo ko;
fi
Это последний, который вам нужен: sed -e 's / [^ [: alnum:] | -] // g'
вы можете сделать это с помощью просто bash
string="-sdfsf"
length=${#string}
if [ $length -lt 2 -o $length -gt 63 ] ;then
echo "length invalid"
exit
fi
case $string in
-* ) echo "not ok : start with hyphen";exit ;;
*- ) echo "not ok : end with hyphen";exit ;;
*[^a-zA-Z0-9-]* ) echo "not ok : special character";exit;;
esac